ํ ์ผ ๋ชฉ๋ก์์ ์๋ฃ๋ ์ผ๋ค์ ํ์ํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํด๋ณด๊ธฐ๋ก ํ๋ค.
์คํ์ผ๋ง์ ์๋ ๊ฒ ํ๊ธฐ๋ก ๐
์ญ์ ๊ธฐ๋ฅ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก App.js์์ onToggle
ํจ์๋ฅผ ์์ฑํ๋ค.
const onToggle = (id) = e => {
setTodos(
todos.map(todo =>
todo.id === id ? {...todo, checked: !todo.checked} : todo,
),
);
};
์ด๋ ์์ดํ
์ id๋ฅผ ๋ฐ์์์ ํด๋น ์์ดํ
์ checked์์ฑ์ ๋ฐ๋๋ก ๋ณ๊ฒฝํด์ค๋ค.
(true->false / false->true)
์ดํ ์ด๋ฅผ <TodoLIst>
์ปดํฌ๋ํธ์ ์ ๋ฌ ํ ๊ทธ๋๋ก TodoList.js๋ก ์ ๋ฌํ๋ค.
export default function TodoList({todos, onRemove, onToggle}) {
return (
<ScrollView>
{todos.map(todo => (
<TodoListItem
key={todo.id}
{...todo}
onRemove={onRemove}
onToggle={onToggle}
/>
))}
</ScrollView>
);
};
์ดํ TodoListItem.js์์๋ <TouchableOpacity>
์ onPressOut
์ด๋ฒคํธ์ onToggle()
ํจ์๋ฅผ ํ ๋นํ๋ค.
๊ทธ๋ฐ ํ checked๊ฐ true์ผ ๋์ ์คํ์ผ๋ง, false์ผ๋์ ์คํ์ผ๋ง์ ๊ตฌ๋ถํด์ฃผ๋ฉด ๋๋ค.
๋๋ ์ฒดํฌ์คํ์ผ๋ง์ FontAwesome์ ์์ด์ฝ์ ์ฌ์ฉํ๊ธฐ๋ก ํ์๊ณ ,
์ฒดํฌ๋ฌ์ ๋ ํ
์คํธ๊ฐ ์์ด์ก์ผ๋ฉด ํด์ ํด๋น ํ๊ทธ์ ์คํ์ผ๋ง์ ์ถ๊ฐํ์๋ค.
export default function TodoListItem({title, id, checked,
onRemove, onToggle}) {
return (
...
<TouchableOpacity onPressOut={onToggle(id)}>
{checked ? (
<Check>
<FontAwesome name="check" color="#000" size={13} />
</Check>
) : ( <UnCheck /> )
}
</TouchableOpacity>
<ItemContent style={checked ? {color: "#444"} :
{color: "#fff"}}>
{title}
</ItemContent>