
์คํฌ๋กค์ด ํ์ํด ์์ด ๋ง์ ์์ดํ ๋ค์ ๋ณด์ฌ์ค ๋ ์ฌ์ฉํ๋ ์ปดํฌ๋ํธ
์คํฌ๋กค์ ํ๋ฉด ์์ง์ด๋ ๋ชจ์ ์ด ๋ํ๋๋ ๊ฒ์ด ํน์ง, ๋ฆฌ์คํธ ์์์ ์คํฌ๋กค ์ฒ๋ฆฌ ๊ฐ๋ฅ
๐App.js<FlatList data={list} renderItem={(item) => <TodoItem label={item.item} />} //์ด๋ค ์์ผ๋ก ๋ํ๋ผ ์ง(map ํจ์์ ํ์๊ณผ ๋์ผ) keyExtractor={(item) => item} //key๊ฐ ์ค์ style={{ flex: 1 }} //์์ ์ด ์ธ ์ ์๋ ์ต๋ ํฌ๊ธฐ ์ฌ์ฉ />
key๋ฅผ ์์ฑํ์ ๊ฒฝ์ฐ๋ keyExtractor ๋ถํ์
๋ง์ฝ, key๋ฅผ ๊ฐ list์ ์์๋ก ํ๊ฒ ๋๋ค๋ฉด,key:list.length+1+''(string์ผ๋ก ๋ณํ) ์ด์ง๋ง ์ด๋ ์ญ์ ์ ๊ฒฝ์ฐ๋ ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์์uuid: ์๋ฒฝํ๊ฒ ๊ฒน์น์ง ์๋ hash-id ์ ๊ณต
ํ๋ฉด์ ํ์๋๊ธฐ์ ๋๋ฌด ๊ธด ๊ฒ์ด ๋จ์
react component์ ์๋ฌด ์๊ด์ด ์๋ ์์ Node package ๋ฐ๋ผ์ expo์ ์๊ด์์ด ์ฌ์ฉํด์ผ ํ๋ฏ๋ก ์ค์น๊ฐ ํ์
๋์ผํ๊ฒ ๋ค์ด๊ฐ๋ ๋๋ค์ผ๋ก ๋ฐฐ์ ๋๊ธฐ ๋๋ฌธ์ ๊ฒน์น ์ผ์ด ๊ฑฐ์ ์์
๐App.jsconst addItem = useCallback(() => { setList([...list, { key: uuid().toString(), content: inputText }]); }, [list, inputText]);tinyuid: string์ด ์กฐ๊ธ ์งง๊ฒ ์์ฑ๋จ
ํ์ฌ Date ํด๋ฆญํ๋ ์์ ์ ์ด์ฉํด์ key๋ฅผ ๋ง๋ค์ด๋ ์๊ด ์์(๊ทธ๋ฌ๋ ์ฌ๋ฌ ์ฌ๋๋ค์ด ๋์์ ์ฌ์ฉํ ๊ฒฝ์ฐ ๋ฌธ์ ๊ฐ ๋ฐ์)
new Date().toString()
์ญ์ ์ ๊ด๋ จ๋ ํจ์๋ฅผ ๋ง๋ค๊ณ ๊ทธ ํจ์๋ฅผ ์ญ์ ๋ฒํผ์์ ํธ์ถ
๐ App.jsconst removeItem = useCallback( (key) => { setList(list.filter((item) => item.key !== key)); }, [list] ); //์ญ์ ํจ์ <FlatList data={list} renderItem={(item) => ( <TodoItem id={item.item.key} //key๋ฅผ ์ ๋ฌํด์ผ ํจ ๊ทธ๋ฌ๋ key๋ ๋ฏธ๋ฆฌ ์ง์ ๋ props //๋ฐ๋ผ์ Flatlist ๋ฑ์ ์ฐ์ด๋ key์ ๊ฒน์น๊ฒ ๋๋ฏ๋ก, id๋ก ๋ช ๋ช label={item.item.content} onDelete={removeItem} //Flatlist์์ onDelete๋ก ์ญ์ ํจ์๋ฅผ ๋ฐ์ /> )} style={{ flex: 1 }} /> //id์ onDelete๋ฅผ ๋๊ฒจ์ฃผ๊ฒ ๋จ๐ TodoItem.js
export default function TodoItem({ label, id, onDelete }) { const [isDone, setDone] = useState(false); return ( <Row style={{ alignItems: "center", marginBottom: 12 }}> <Checkbox value={isDone} onValueChange={(value) => setDone(value)} valuestyle={{ marginRight: 8 }} /> <Text style={{ color: isDone ? "#eee" : "#000" }}> {label ?? "๋ด์ฉ ์์"} </Text> <Button title="์ญ์ " onPress={() => onDelete(id)} /> </Row> ); }id ์ฆ, key๋ฅผ ์ด์ฉํด์ ์ญ์ ๋ฅผ ํ๋ฏ๋ก ์ค๊ฐ์ ๊ฒ๋ค๋ ์ญ์ ๊ฐ๋ฅ
๋ง์ฝ, removeItem์ component๋ฅผ ํด๋น component์์์ ์คํ์ํฌ ๊ฒฝ์ฐ
id๋ฅผ ๋๊ฒจ์ฃผ์ง ์์๋ ๋๋ฏ๋ก ๋๊ฒจ์ฃผ๋ props๊ฐ ์ ์ด์ง๐ //App.js <FlatList data={list} renderItem={(item) => ( <TodoItem id={item.item.key} label={item.item.content} onDelete={()=>removeItem(item.item.key)} /> )} style={{ flex: 1 }} /> //TodoItem.js <Button title="์ญ์ " onPress={onDelete} />