๐Ÿ’ป[React Native] Expo๋กœ TodoList ๋งŒ๋“ค๊ธฐ3-TextInput, useCallback(+alert)

ํ˜ฑยท2023๋…„ 1์›” 15์ผ

๐Ÿ“Œ TextInput์œผ๋กœ ์ž…๋ ฅํ•œ ๊ฐ’ handling

์ž…๋ ฅํ•œ ๋‚ด์šฉ์„ ์›๋ž˜ ์žˆ๋˜ 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>
  );
}

๐Ÿ“Œ useCallback: Rendering์„ ํ•  ๋•Œ ๋‹ค์‹œ ๊ทธ๋ ค์ง€๊ฑฐ๋‚˜ ์ค‘๋ณต๋˜๋Š” ๊ฒฝ์šฐ

๋ Œ๋”๋ง์„ ์ผ์–ด๋‚œ๋‹ค๊ณ  ํ•ด๋„ ์œ„์˜ ๋ชฉ๋ก ๋ถ€๋ถ„์€ ๋˜‘๊ฐ™์ด ๋‹ค์‹œ ๊ทธ๋ ค์ง€๋Š” ๋ถ€๋ถ„์ด๊ณ , ํ˜„์žฌ ์ž…๋ ฅ๋˜๋Š” 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('ํƒ€์ดํ‹€', '๊ฒฝ๊ณ  ๋‚ด์šฉ')

profile
new blog: https://hae0-02ni.tistory.com/

0๊ฐœ์˜ ๋Œ“๊ธ€