์ด์ ๊ฐ์ข์์ ์ด์ด์ง๋ ๋ด์ฉ์ ๋๋ค. ์ด๋ฒ์๋ To-Do์ฑ์์ ํ ์ผ์ ๋ฑ๋กํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํฉ๋๋ค.
App ์ปดํฌ๋ํธ ํด๋์ค์ state๋ฅผ ์ถ๊ฐํ๋ค.
export default class App extends React.Component {
// state ์ถ๊ฐํจ.
state = {
todos: []
}
state.todos๋ ํ ์ผ(todo)์ ์ ์ฅํ๋ค.
๊ทธ๋ฆฌ๊ณ addTodo() ํจ์๋ฅผ ๊ตฌํํ๋ค.
// ํ ์ผ ์ถ๊ฐ ํจ์
addTodo = (todo) => {
// ์๋ก์ด ํ ์ผ(todo) ๊ฐ์ฒด ์์ฑ
const newTodo = {
id: Date.now(), // ๋ฑ๋ก์๊ฐ
text: todo, // ํ ์ผ ๋ด์ฉ
completed: false, // ์๋ฃ ์ฌ๋ถ
}
// state ์
๋ฐ์ดํธ
this.setState(prevState => ({
todos: [
newTodo, // ์๋ก ์ถ๊ฐ๋ ํ ์ผ(todo)
...prevState.todos // ๊ธฐ์กด์ ํ ์ผ ๋ชฉ๋ก
]
}));
// ์ฝ์์ฐฝ์ ์ถ๋ ฅํด๋ณด์~
console.log(this.state.todos);
}
addTodo()ํจ์์ ๊ธฐ๋ฅ์state.todos๋ฐฐ์ด์ ์๋ก์ด ํ ์ผ(todo) ์ ์ถ๊ฐํ๋ ๊ฒ์ด๋ค. ๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ์์๋state๊ฐ์ ๋ณ๊ฒฝํ๊ธฐ ์ํด์ ๋ฐ๋์this.setState()ํจ์๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค. setState() ํจ์์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋ค์ ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ๋ค.
https://facebook.github.io/react-native/docs/state
๊ทธ๋ฆฌ๊ณ ๊ตฌํํ addTodo() ํจ์๋ฅผ Header ์ปดํฌ๋ํธ์ ์ ๋ฌํ๋ค.
<Header addTodo={this.addTodo}/>
์ฌ๊ธฐ๊น์ง ์์
ํ App.js ํ์ผ์ ์ฝ๋ ๋ด์ฉ์ ์๋์ ๊ฐ๋ค.
Header ์ปดํฌ๋ํธ ํด๋์ค์๋ state๋ฅผ ์ถ๊ฐํ๋ค.
class Header extends Component {
state = {
newTodo: '',
}
state.newTodo๊ฐ์ <TextInput> ์value์ ์ฌ์ฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ addNewTodo() ํจ์๋ฅผ ๊ตฌํํ๋ค.
addNewTodo = () => {
if(this.state.newTodo) {
this.props.addTodo(this.state.newTodo);
this.setState({
newTodo: ''
});
}
}
addNewTodo()ํจ์์์๋ ๋ถ๋ชจ ์ปดํฌ๋ํธ(App)์์ ์ ๋ฌ ๋ฐ์this.props.addTodo()ํจ์๋ฅผ ํธ์ถํ๋ค. ๊ทธ๋ฆฌ๊ณstate.newTodo๊ฐ์ ์ด๊ธฐํํ๋ค.
Header ์ปดํฌ๋ํธ์ render() ํจ์๋ฅผ ์์ ํ๋ค. <TextInput> ์ value์ onChangeText ์์ฑ์ ์ถ๊ฐํ๋ค.
<TextInput
style={styles.inputText}
placeholder='Enter new todo'
autoCorrect={ false }
value={this.state.newTodo}
onChangeText={(newTodo) => this.setState({newTodo})}
/>
value์๋state.newTodo๊ฐ์ ๋ณด์ฌ์ฃผ๋๋ก ํ๋ค. ๊ทธ๋ฆฌ๊ณonChangeText์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด ์ ๋ ฅํ ๊ฐ์ดstate.newTodo์ ์ ๋ฐ์ดํธ๋๋ค. react์ ๋ ๋๋ง ๋ฐฉ์๋๋ฌธ์ ์ด๋ ๊ฒ ๋ณต์กํ๊ฒ ๊ตฌํํด์ผํ๋ค.
๋ง์ง๋ง์ผ๋ก + ๋ฒํผ์ ํฐ์นํ๋ฉด ์๋ก์ด ํ ์ผ์ ์ถ๊ฐํ๊ธฐ ์ํด์ addNewTodo() ํจ์๋ฅผ ํธ์ถํ๋๋ก ํด๋ณด์. TouchableOpacity ์ปดํฌ๋ํธ์ onPressOut ์ด๋ฒคํธ๋ฅผ ์ฌ์ฉํ๋ค.
<TouchableOpacity onPressOut={this.addNewTodo}>
<MaterialCommunityIcons style={styles.addBtn} size={30} name='plus-circle' />
</TouchableOpacity>
์ฌ๊ธฐ๊น์ง ์์
ํ Header.js ํ์ผ์ ์ฝ๋ ๋ด์ฉ์ ์๋์ ๊ฐ๋ค.
์ด์ ์ฑ์ ์คํํ๊ณ ํ ์ผ์ ์ถ๊ฐํด๋ณธ๋ค. ๊ทธ๋ฆฌ๊ณ ํฌ๋กฌ ๋ธ๋ผ์ฐ์ ์ฝ์์ฐฝ์์ ๋ฐ์ดํฐ๋ฅผ ํ์ธํด๋ณด์.
ํฌ๋กฌ ๋ธ๋ผ์ฐ์ ์ฝ์์ฐฝ์ ๋ํ๋์ง ์๋๋ค๋ฉด, ์ฑ์์ ๋ฉ๋ด๋ฅผ ์ด์ด ์ฝ์ ๋๋ฒ๊น ๋ชจ๋๋ฅผ ํ์ฑํ ํด์ผํ๋ค.
์ค๋งํธํฐ์ ์ข์ฐ๋ก ํ๋ค๋ฉด ๋ฉ๋ด๊ฐ ๋ํ๋๋ค. ์๋ฎฌ๋ ์ดํฐ๋ผ๋ฉด ๋จ์ถํค
Ctrl + DorCmd + D์ด๋ค.
Start Remote JS Debugging ๋ฉ๋ด๋ฅผ ์ ํํ๋ค. ๊ทธ๋ผ ํฌ๋กฌ ๋ธ๋ผ์ฐ์ ๊ฐ ์๋์ผ๋ก ์คํ๋๋ค.
๋ค์ ๊ฐ์ข์์ ์ถ๊ฐ๋ ํ ์ผ์ ๋ชฉ๋ก์ ํ์ํ๋ ๊ธฐ๋ฅ์ ๊ตฌํ ํ ๊ฒ์ด๋ค.
๊ฐ๋จํ ์ฑ๋ ๊ธฐ๋ฅ ๊ตฌํ์ด ๋ค์ด๊ฐ๋ ๋ณต์กํด์ก์ต๋๋ค. ๊ตฌํ ๊ณผ์ ์ ํ ์คํธ๋ก ์ฝ๊ฒ ์ค๋ช ํ๊ธฐ๊ฐ ์ฝ์ง ์์ต๋๋ค.
์ฌ๋ฌ๋ถ์ ์ฌ์ฉํ๊ณ ์๋ ํ ์ผ ๊ด๋ฆฌ์ฑ์ด ์๋์? ์ ๋ Google Tasks์ Trello๋ฅผ ๋ณํํด์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ํ์ง๋ง ๋ ์ฑ ๋ชจ๋ ๊ธฐ๋ฅ์ด ๋ง์ด ๋ถ์กฑํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ตฌ๊ธ์ ์๋ ๊ณ์ ์ฌ์ฉํ๋ ์ฑ์ด๋ผ์ ๊ทธ๋ฅ ๊ณ์ ์ฌ์ฉํ๊ณ ์๋ค์.ใ
์๋ ํ์ธ์ ์คํฐ๋ฏธ์ธ ์ฌ๋ฌ๋ถ. ์ค๋ ์ฌ๋ฌ๋ถ๊ป ์คํ ๋ธ๋ก์ฒด์ธ ๊ธฐ๋ฐ ๊ด๊ณ ํ๋ซํผ DCLICK์ ์๊ฐ...