์ ๋ฒ ํฌ์คํ
์ ์ด์ด์,
์ค์ผ์น ํด๋์ ๋๋ก ์คํ์ผ๋ง์ ํด์ ํ์ ์์ฑ ์์ผ๋์๊ณ
์ด์ ๊ทธ ํ๋๋ก ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ฉด ํฌ๋๋ฆฌ์คํธ ์์
์ ๋...!
์ฌ์ค ๋จผ์ ๋งํด๋๊ณ ์ ํ๋ค๋ฉด, ์ค์ผ์นํ๋๋ก ๋ง๋ค์ง๋ ๋ชปํ๋ค.
Modal์ ์ฌ์ฉํด์ ํค๋ณด๋๋ฅผ ๋์ฐ๊ณ , ์
๋ ฅํ ๋๋ก ๋ชฉ๋ก์ ์ถ๊ฐ์ํค๋๋ก ์์
์ ์งํํ๋ค๊ฐ
Modal์์ ๋ญ๊ฐ ๊ผฌ์ธ๊ฑด์ง, ์ถ๊ฐ๋ฒํผ์ ๋๋ฅด๋ฉด ๊ธฐ์กด์ ์๋ ๋ชฉ๋ก์ด ์ฌ๋ผ์ง๋ฉด์
์ถ๊ฐํ๋ ๊ณผ์ ์ ์ค๋ฅ๊ฐ ์๊ธฐ๋๊ฑธ ํด๊ฒฐ์ ๋ชปํ๋คใ
ใ
๊ทธ๋ฐํ, ๋์ ์ ์ธํ์ฐฝ์ ์ฐฝ ๋งจ ํ๋จ์ ์์น์์ผ์ ๋ชฉ๋ก์ ์ถ๊ฐ์ํค๋ ์คํ์ผ๋ง์ผ๋ก
์งํ์ ํ๊ณ ์์๋๋ฐ,
๊ตฌ๊ธ๋ง์ผ๋ก๋ ์ฌ์๋ณด์ด๋ ํค๋ณด๋ ์์ ์ธํ์ฐฝ์ ๋์ฐ๋๊ฒ ์๊ทธ๋ฆฌ๋ ์๋๋๊ฑด์ง,,,,๐คฌ
<keyboardAboidingView>
๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ๋จํ๊ฒ ๋๋๋ฐ
์ ๋ด๊บผ๋ ์๋๋๊ฑด์งใ
ใ
<ScrollView>
์ ๋ญ๊ฐ๊ฐ ๊ผฌ์ด๋๊ฑด์ง
๋ง์ ๋ฃ์ง๊ฐ ์์๊ณ ....
์ฌ๋ฌ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ์๋ํด๋ด๋ ๊ณ์ ํค๋ณด๋๊ฐ ์ธํ์ฐฝ์ ๊ฐ๋ ค๋ฒ๋ฆฌ๋ ๋ฐ๋์
๊ทธ๋ฅ ์ฝ๊ฒ.... ๋งจ ์๋ก ์ฌ๋ ค๋ฒ๋ฆฌ๊ธฐ๋ก ํ๋คใ
ใ
์๊ฐ์ ๋ ์ธ์๊ฐ ์์ด!!!!
๊ธฐ์กด์ Header์ ์๋ + ๋ฅผ ํด๋ฆญํ๋ฉด ํค๋ณด๋์ฐฝ์ด ๋จ๋๋ก ์ค์ผ์น๋ฅผ ํด๋์์ผ๋,
๊ณ์ ๋์์ ธ ์๋ ์ธํ์ฐฝ์ ๋ด์ฉ์ ์
๋ ฅํ ํ v์ ํด๋ฆญํ๋ฉด
๋ชฉ๋ก์ ์ถ๊ฐ๋ ์ ์๋๋ก ์์ ์์
์ ๊ฑฐ์ณค๋ค.
์ฐ์ ๋ชฉ๋ก์ ์์ดํ
๋ค์ ์ถ๊ฐํ๊ณ , ์ญ์ ํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ธฐ ์ํด์ todos
๋ผ๋ ์ด๋ฆ์ผ๋ก
id,title,checked์ ์์ฑ์ ๊ฐ๋ ๊ฐ์ฒด๋ฅผ ํตํด ๊ด๋ฆฌํ๊ธฐ๋ก ํ๋ค.
์ดํ, useState
ํ
์ ํตํด์ ์ด๊ธฐ ์ํ๊ฐ์, ์ฌ๋ฌ๊ฐ์ ๋ชฉ๋ก ๊ฐ์ฒด๋ฅผ ๋ด์ ์ ์๋ ๋ฐฐ์ด[]
์ ๋ฃ์ด์ค๋ค
const [todos , setTodos ] = useState([]);
๋ชฉ๋ก์ ์ถ๊ฐํ๊ธฐ ์ํด addItem
ํจ์๋ฅผ ๋ง๋ ํ setTodos
๋ฅผ ์ฌ์ฉํด์ ๋ฐฐ์ด์ ์์ฑํ๋ค.
const addItem = text => {
setTodos([
...todos,
{id : Math.random().toString(), title : text, checked : false},
]);
};
๊ธฐ์กด์ ๋ชฉ๋ก์ ์๋ ํ ์ผ๋ค์ ...todos
๋ฅผ ๋ณด๋ฉด, ํ์ฌ์ํ์ todos๋ค์ ๊ทธ๋๋ก ๊ฐ์ ธ์จ๋ค๋ ์๋ฏธ์ด๋ค.
๋ฐ๋ผ์ setTodos
ํจ์๋ฅผ ํตํด์ ์ด์ ์ ๋ชฉ๋ก์ ๊ทธ๋๋ก ์ ์งํ๋ฉด์ ์๋ก์ด ์์ดํ
๋ค์ ์ถ๊ฐํ ๋ฐฐ์ด์ ์์ฑํ๋ ๊ฒ์ด๋ค.
์ดํ App.js์์ <TodoInsert onAddItem={addItem}>
์ฒ๋ผ inset์ปดํฌ๋ํธ์ ์ ๋ฌํ ํ TodoInsert.js์์ ๋ฐ์์ ์ฌ์ฉํ๋ฉด ๋๋ค.
TextInput์์ ์
๋ ฅ๋๋ ํ
์คํธ๊ฐ์ ๋ฐ์์ค๊ธฐ ์ํด์๋ ํ
์คํธ์ ์ํ๊ฐ์ ๊ด๋ฆฌํ๋ ๊ฒ๋ ํ์ํ๋ฐ, ์๋ก์ด useState
ํ
์ ์ฌ์ฉํ์ฌ ๊ด๋ฆฌํด์ค๋ค.
์ด๋ฅผ <TextInput>
์์๋ onChangeText
์์ฑ์ ํตํด ํธ๋ค๋ฌ ํจ์๋ก ๊ด๋ฆฌํด์ฃผ๊ณ
value
๊ฐ์ผ๋ก๋ state๊ฐ์ธ newTodoItem
๋ฃ์ด์ฃผ๊ฒ ๋๋ฉด
์ค์๊ฐ์ผ๋ก ์
๋ ฅ๋ ํ
์คํธ์ ์ํ๊ฐ ์
๋ฐ์ดํธ ๋๊ฒ ๋๋ค.
export default function TodoInsert({onAddItem}) {
const [newTodoItem, setNewTodoItem] = useState('');
const itemInputHandler = (newTodo) => {
setNewTodoItem(newTodo);
};
...
<TextInput
...
onChangeText={itemInputHandler}
value={newTodoItem}
...
๋ค์์ผ๋ก๋ ๋ฒํผ์ ํด๋ฆญํ๋ฉด ์์ดํ
์ด ๋ชฉ๋ก์ ์ถ๊ฐ๋ ์ ์๋๋ก ํธ๋ค๋ฌ ํจ์๋ฅผ ์ถ๊ฐํด์ค๋ค.
onAddItem
ํจ์๋ฅผ ํตํด ์
๋ ฅํ ํ
์คํธ ๊ฐ์ ๋ฐ์์ ๋ชฉ๋ก์ ์ถ๊ฐํ๊ณ ,
setNewTodoItme
ํจ์๋ฅผ ํตํด์ ๋ฒํผ์ด ํด๋ฆญ๋ ํ ์
๋ ฅ์ฐฝ์ ๊ณต๋ฐฑ์ผ๋ก ๋ง๋ค์ด์ฃผ๋ ์ญํ ์ ์ฃผ์ด์ค๋ค.
const addItemHandler = () => {
onAddItem(newTodo);
setNewTodoItem('');
}
...
<AddButton onPress={addItemHandler} />
...
์์ ๋งํ๋ ํ ์ผ ๋ชฉ๋ก์ ๊ฐ์ฒด๊ฐ ๋ด๊ธด ๋ฐฐ์ด์ธ todos
๋ฅผ TodoList
์ปดํฌ๋ํธ์ ์ ๋ฌํด์ค๋ค.
์ดํ ๋ฐฐ์ด์ ์๋ ์์ดํ
์ ๊ฐ๊ฐ TodoListItem
์ปดํฌ๋ํธ์ ๋๊ธฐ๊ธฐ ์ํด map()
์ ์ฌ์ฉํด์ค๋ค.
export default function TodoList({todos}) {
return (
<ScrollView>
{todos.map(toeo => (
<TodoListItem {...todo} />
))}
</ScrollView>
);
};
์์ดํ
๊ฐ๊ฐ์๋ ๊ณ ์ ํ id์ titile, checked๋ผ๋ key์ value๊ฐ ๋ด๊ฒจ์๋๋ฐ
์ด๋ฅผ <TodoListItem>
์ปดํฌ๋ํธ์์ ๋ฐ์ ์ ์๋ค.
export default function TodoListItem({title, id, checked}) {
return
...
<ItemContent>{title}</ItemContent>
์ด๋ ๊ฒ ๋๋ฉด ์ธํ์ฐฝ์ ์ ๋ ฅํ ํ ์คํธ๊ฐ ๋ฒํผ ํด๋ฆญ์ ํตํด์ ๋ฆฌ์คํธ์ ์ถ๋ ฅ์ด ๋๋ค.