React-Native Tutorial To do list [ #12 ]

์กฐํŒ”๋กœยท2020๋…„ 9์›” 22์ผ
0

React-Native-Todolist

๋ชฉ๋ก ๋ณด๊ธฐ
12/15
post-thumbnail

React Native Tutorial ๋”ฐ๋ผํ•˜๊ธฐ ๐Ÿ“ฑ

๐Ÿ“Œ ํŠœํ† ๋ฆฌ์–ผ์„ ๋”ฐ๋ผํ•œ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค!

ํ•  ์ผ ๋ชฉ๋ก ์ถ”๊ฐ€ํ•˜๊ธฐ - TodoInsert

setTodos๋กœ ํ•  ์ผ ๋ชฉ๋ก์„ ์ถ”๊ฐ€ํ•˜๋Š” addTodo ํ•จ์ˆ˜ ๋งŒ๋“ค๊ธฐ

app.js์— ์•„๋ž˜์˜ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ์„ธ์š”!

const addTodo = text => {
    setTodos([
      ...todos,
      {id: Math.random().toString(), textValue: text, checked: false},
    ]);
  };

์„ค๋ช…

addTodoํ•จ์ˆ˜๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ํ…์ŠคํŠธ๋ฅผ ์ธ์ž๋กœ ๋ฐ›์•„ ์ƒˆ๋กœ์šด todo ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. id๋Š” ๋žœ๋ค์œผ๋กœ ์ƒ์„ฑ๋˜๋„๋ก ํ•˜์˜€๊ณ , ์™„๋ฃŒ ์—ฌ๋ถ€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” checked ์†์„ฑ์€ false๋ฅผ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ํ…์ŠคํŠธ๋Š” textValue ์†์„ฑ์„ ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค. ๊ธฐ์กด ํ•  ์ผ ๋ชฉ๋ก์€ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” todos๋ฅผ ์ด์šฉํ•ด์„œ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ setTodos ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ด์ „์— ์žˆ๋˜ ๋ชฉ๋ก์€ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•˜๋ฉด์„œ ์ƒˆ๋กœ์šด ๋ชฉ๋ก์„ ์ถ”๊ฐ€ํ•œ ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

addTodo ํ•จ์ˆ˜๋ฅผ TodoInsert ์ปดํฌ๋„ŒํŠธ๋กœ ์ „๋‹ฌํ•˜๊ธฐ

app.js์•ˆ์˜ ๋ถ€๋ถ„์„ ์ˆ˜์ •ํ•ด์ฃผ์„ธ์š”!

<TodoInsert onAddTodo={addTodo} />

์ „๋‹ฌ๋ฐ›์€ ํ•จ์ˆ˜ ๋ฐ›๊ธฐ

TodoInsert.js ์•ˆ์— ์•„๋ž˜์˜ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ์„ธ์š”!

const TodoInsert = ({onAddTodo}) => {
  ...
}

useState ํ›…์„ ์ด์šฉํ•˜์—ฌ ์ž…๋ ฅ๋ฐ›์€ ๊ฐ’์˜ ์ƒํƒœ ๊ด€๋ฆฌํ•˜๊ธฐ

// components/TodoInsert.js
import React, {useState} from 'react';

const TodoInsert = ({onAddTodo}) => {
  const [newTodoItem, setNewTodoItem] = useState('');
...
}

์„ค๋ช…

ํ…์ŠคํŠธ ๊ฐ’์€ ๋ฌธ์ž์—ด(string)์ด๋ฏ€๋กœ ์ดˆ๊ธฐ ์ƒํƒœ๊ฐ’์€ ''๋กœ ์ดˆ๊ธฐํ™” ํ•ฉ๋‹ˆ๋‹ค. newTodoItem๋Š” ์ƒˆ๋กœ ์ž…๋ ฅํ•œ ํ…์ŠคํŠธ์˜ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๊ณ , setNewTodoItem์€ newTodoItem์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.

์‹ค์‹œ๊ฐ„ ๊ฐ’ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ๋žœ๋“ค๋Ÿฌ ํ•จ์ˆ˜ ์ƒ์„ฑํ•˜๊ธฐ

const todoInputHandler = newTodo => {
    setNewTodoItem(newTodo);
  };

...
    <View style={styles.inputContainer}>
      <TextInput
        style={styles.input}
        placeholder="Add an item!"
        placeholderTextColor={'#999'}
        onChangeText={todoInputHandler}
        value={newTodoItem}
        autoCorrect={false}
      />
...

์„ค๋ช…

TextInput ์ปดํฌ๋„ŒํŠธ์˜ ์†์„ฑ์œผ๋กœ onChangeText์„ ์ถ”๊ฐ€ํ•˜์˜€๊ณ  ๊ทธ ์•ˆ์— todoInputHandler๋ฅผ ๋„ฃ์–ด์ค๋‹ˆ๋‹ค. ๋˜ํ•œ value ์†์„ฑ์—๋Š” newTodoItem์„ ๋„ฃ์–ด์ค๋‹ˆ๋‹ค. ์ด์ œ ์ž…๋ ฅ์ฐฝ์— ํ…์ŠคํŠธ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ž…๋ ฅํ•œ ํ…์ŠคํŠธ ๊ฐ’์˜ ์ƒํƒœ๊ฐ€ ์—…๋ฐ์ดํŠธ ๋˜๋ฉฐ newTodoItem์—๋Š” ํ…์ŠคํŠธ ๊ฐ’์˜ ์ตœ์‹  ์ƒํƒœ๊ฐ€ ๋‹ด๊ธฐ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์•„์ดํ…œ์„ ์ถ”๊ฐ€ํ•ด์ฃผ๋Š” ํ•ธ๋“ค๋Ÿฌ ์ƒ์„ฑํ•˜๊ธฐ

const addTodoHandler = () => {
    onAddTodo(newTodoItem);
    setNewTodoItem('');
  };

...

      <View style={styles.button}>
        <Button title={'ADD'} onPress={addTodoHandler} />
      </View>
...

์„ค๋ช…

addTodoHandler ํ•จ์ˆ˜ ์•ˆ์—๋Š” onAddTodo์™€setNewTodoItem๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. onAddTodo ํ•จ์ˆ˜๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ํ…์ŠคํŠธ ๊ฐ’์„ ์ „๋‹ฌ ๋ฐ›์•„ ๋ชฉ๋ก์— ์ถ”๊ฐ€ํ•˜๊ณ , setNewTodoItemํ•จ์ˆ˜๋Š” ์ž…๋ ฅ์ฐฝ์„ ๊ณต๋ฐฑ์œผ๋กœ ์ดˆ๊ธฐํ™” ์‹œํ‚ค๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

Button ์ปดํฌ๋„ŒํŠธ์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” onPress ์ด๋ฒคํŠธ์— addTodoHandler() ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋„ฃ์–ด์ค๋‹ˆ๋‹ค. ์ด์ œ ์‚ฌ์šฉ์ž๊ฐ€ ADD ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์•„์ดํ…œ์ด ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.

profile
ํ˜„์‹ค์— ์•ˆ์ฃผํ•˜์ง€ ์•Š๊ณ  - ๊ฐœ๋ฐœ์ž

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