์ด์ ํฌ์คํ
์ธ '์ถ๊ฐ๊ธฐ๋ฅ ๊ตฌํ'์ ๋นํด์ ์ญ์ ๊ธฐ๋ฅ์ ๋น๊ต์ ์ฝ๋์์ด ๋ง์ง ์๋ค.
์ํ๊ด๋ฆฌ์ ๋ํ ๋ด์ฉ๊น์ง ๋ค์ด๊ฐ๋ค ๋ณด๋ ์ถ๊ฐ๊ธฐ๋ฅ์ ๋ํ ๊ธ์ด ๊ธธ์์ง๋ง,
๋ฐํ์ด ๋ค ์กํ์๋ ์ํฉ์์ ์ญ์ ๊ธฐ๋ฅ์ ์ ๋ง ์์ฌ์ ๋ค.
๊ธฐ์กด ์์ ๋ค์ ๋์์๋, ํด์งํต ๋ชจ์์ ์์ด์ฝ ๋ฒํผ์ ํด๋ฆญํด์ ์ญ์ ํ๋ ๊ธฐ๋ฅ ๋ง๊ณ
๋๋ ์กฐ๊ธ ๋
ํนํ๊ฒ Swipeable
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํด์ ์ฌ์ฉํ๊ธฐ๋ก ํ๋ค.
์์ดํฐ์ ๋ง์ด ์๋ ๊ธฐ๋ฅ์ธ๋ฐ, ์ด๋ค ํ๋ฐฉํฅ์ผ๋ก ๋ฐ์ด์ ์จ์ด์๋ ๊ธฐ๋ฅ์ด ๋ํ๋ ์ ์๋๋ก
ํจ๊ณผ?๋ฅผ ์ฃผ๋ ๊ฒ ๊ฐ์๋ค.
๊ทธ๋์ ๋๋ ์ญ์ ๊ธฐ๋ฅ์, ๋ชฉ๋ก ์ค๋ฅธ์ชฝ์์ ๋ํ๋๊ฒ ํ๋๋ก ๋ง๋ค๊ธฐ๋ก ํ๋ค.
์ฐ์ App.js์์ onRemove
๋ผ๋ ํจ์๋ฅผ ์์ฑํ ํ <TodoList>
์ปดํฌ๋ํธ์ ์ ๋ฌํ๋ค.
const onRemove = id = e => {
setTodos(todos.filter(todo => todo.id !==id));
};
...
<TodoList todos={todos} onRemove={onRemove} />
...
์ด๋ ๊ฐ ์์ดํ
์ ๊ณ ์ id๋ฅผ ๋ฐ์์ ํด๋น ์์ด๋๋ฅผ ๊ฐ์ง ์์ดํ
์ ์ ์ธํ ์๋ก์ด ๋ฐฐ์ด์ ๋ง๋๋ ํจ์๋ค.
์ดํ TodoList.js์์ onRemove
ํจ์๋ฅผ ๋ฐ์ <TodoListItem>
์ปดํฌ๋ํธ์ ์ ๋ฌํ๋ค.
export default function TodoList({todos, onRemove}) {
return (
<ScrollView>
{todos.map(todo => (
<TodoListItem key={todo.id} {...todos} onRemove={onRemove} />
))}
</ScrollView>
);
};
TodoListItem.js์์๋ ์ ์ฒด ์ฝ๋๋ฅผ <Swipeable>
์ปดํฌ๋ํธ๋ก ๊ฐ์ผ ํ
์ญ์ ๋ฒํผ์ ์ํ <DeleteButton>
์ปดํฌ๋ํธ๋ฅผ ์์ฑํ๊ณ
renderRightActions
๋ฅผ ์ฌ์ฉํด์ ๋ง๋ <DeleteButton>
์ปดํฌ๋ํธ์์
onPress
์ด๋ฒคํธ์ onRemove
ํจ์๋ฅผ ํ ๋นํ๋ฉด ๋๋ค.
export default function TodoListItem({title, id, checked, onRemove}) {
const DeleteButton = ({onPress}) => {
return (
<TouchableOpacity activeOpacity={0.8} onPress={onPress}>
<DeleteText>์ญ์ </DeleteText>
</TouchableOpacity>
);
};
return (
<Swipeable
renderRightActions={()=> <DeleteButton onPress={onRemove(id)} />}>
...
</Swipeable>