
์ ๋ ฅํ ๋ด์ฉ์ ์๋ ์๋ List์ ๋์
export default function App() { const [list, setList] = useState(["ํ ์ผ 1", "ํ ์ผ 2"]); const [inputText, setInputText] = useState(""); return ( <SafeAreaView style={styles.container}> <Padding padding={12}> {list.map((item) => ( <TodoItem key={item} label={item} /> ))} <Row> <TextInput style={styles.input} value={inputText} //inputText๋ฅผ value๋ก ๊ฐ์ง onChangeText={(text) => setInputText(text)} //text๊ฐ ๋ณํ๋ฉด setInputText์ ๋์ /> <Button title="Send" onPress={() => { setList([...list, inputText]); //List์ ์๋ ์๋ list๋ชฉ๋ก ๋ค์์ TextInput์ value๊ฐ์ธ inputText๋ฅผ ๋ฃ์ }} /> </Row> </Padding> <StatusBar style="auto" /> </SafeAreaView> ); }
๋ ๋๋ง์ ์ผ์ด๋๋ค๊ณ ํด๋ ์์ ๋ชฉ๋ก ๋ถ๋ถ์ ๋๊ฐ์ด ๋ค์ ๊ทธ๋ ค์ง๋ ๋ถ๋ถ์ด๊ณ , ํ์ฌ ์ ๋ ฅ๋๋ TextInput์์๋ง ์๋ก์ด ๋ ๋๋ง์ด ์ผ์ด๋จ
onPress์ ์ ๋ ฅํจ์๋ ๋ ๋๋ง์ ํ ๋๋ง๋ค ํจ์๊ฐ ํ๋์ฉ ๋ง๋ค์ด๋
ํ์ํ ๋ ํ์ํ ๋งํผ๋ง ๋ง๋ค ์ ์๋ค๊ณ ํ๋ค๋ฉด, ํจ์ฌ ์ฑ๋ฅ์ด ์ข์์ง ๊ฒ!const addItem = useCallback(() => { if (list.includes(inputText)) { return alert("์ด๋ฏธ ๋ฑ๋ก๋ ํญ๋ชฉ์ ๋๋ค."); } // inputText์ ์ด๋ฏธ ๋ค์ด์๋ ๋ด์ฉ์ด๋ฉด alert์ ๋์ฐ๋๋ก *includes!! setList([...list, inputText]); }, [list, inputText]); //list ๋๋ inputText์ ๋ณํ๊ฐ ์๊ธฐ๋ฉด, setListํจ์๊ฐ ๋ง๋ค์ด์ ธ ํธ์ถ๋จ์ ํํ๊ฒ ํ์ํ ๋ฒ์๋ฅผ ์ง์ ํ ํ ๊ทธ๊ฒ๋งํผ๋ง ๋์์ ํ๋๋ก ๋ง๋ค ์ ์๊ณ ๊ทธ ์ธ ๋์๋ค์ ๋ฐ๋ณต์ ์ธ ๋ถํ์ํ ๋์๋ค์ ํ์ง ์์ ์ ์์
๐ React Native ๊ธฐ๋ณธ alert Component ์ฌ์ฉํ๊ธฐ
const addItem = useCallback(() => { if (list.includes(inputText)) { return Alert.alert('์ค๋ฅ', "์ด๋ฏธ ๋ฑ๋ก๋ ํญ๋ชฉ์ ๋๋ค."); } setList([...list, inputText]); }, [list, inputText]);์ด๋ Alert Component๋ title์ ์ง์ ํ ์ ์์
Alert.alert('ํ์ดํ', '๊ฒฝ๊ณ ๋ด์ฉ')