๐ ํํ ๋ฆฌ์ผ์ ๋ฐ๋ผํ ํ๋ก์ ํธ์ ๋๋ค!
๊ฐ ๋ชฉ๋ก์ ์ผ์ชฝ์ ์๋ ํ๋์ ํ ๊ธ ๋ฒํผ์ ๋๋ฅด๋ฉด ์ฒดํฌ ํ์๊ฐ ๋๊ณ ํ ๋ฒ ๋ ๋๋ฅด๋ฉด ์ฒดํฌ๊ฐ ํด์ ๋๋๋ก ๊ตฌํํด๋ณด๊ฒ ์ต๋๋ค.
const onToggle = id => e => {
setTodos(
todos.map(todo =>
todo.id === id ? {...todo, checked: !todo.checked} : todo,
),
);
};
onToggle ํจ์๋ ์์ดํ ์ id๋ฅผ ๋ฐ์์์ ํด๋นํ๋ ์์ดํ ์ checked ์์ฑ๊ฐ์ ๋ฐ๋๋ก ๋ณ๊ฒฝํด์ค๋๋ค. (true์ด๋ฉด false๋ก, false์ด๋ฉด true๋ก)
<TodoList todos={todos} onRemove={onRemove} onToggle={onToggle} />
const TodoList = ({todos, onRemove, onToggle}) => {
return (
<ScrollView contentContainerStyle={styles.listContainer}>
{todos.map(todo => (
<TodoListItem
key={todo.id}
{...todo}
onRemove={onRemove}
onToggle={onToggle}
/>
))}
</ScrollView>
);
};
const TodoListItem = ({textValue, id, checked, onRemove, onToggle}) => {
return (
<View style={styles.container}>
<TouchableOpacity onPressOut={onToggle(id)}>
{checked ? (
<View style={styles.completeCircle}>
<Icon name="circledowno" size={30} color="#3143e8" />
</View>
) : (
<View style={styles.circle} />
)}
</TouchableOpacity>
<Text
style={[
styles.text,
checked ? styles.strikeText : styles.unstrikeText,
]}>
{textValue}
</Text>