[React-Native]To-Do-App 삭제하기


이번엔 등록한 일을 삭제해보겠습니다.


_makeTodoItem 수정하기

_makeTodoItem 함수 안의 TodoItem을 수정해봅시다.

//App.js
_makeTodoItem = ({ item, index }) => {
    return (
      <TodoItem
        text={item.title}
        isComplete={item.isComplete}
        changeComplete={() => {
          const newTodo = [...this.state.todos]
          newTodo[index].isComplete = !newTodo[index].isComplete
          this.setState({todos:newTodo})
        }}
        deleteItem={() => {
          const newTodo = [...this.state.todos]
          newTodo.splice(index,1)
          this.setState({todos:newTodo})
        }} />
    )
  }

TodoItem 컴포넌트에 deleteItem 이라는 속성이 추가되었고, 익명 함수를 속성 값으로 주고 있습니다. 이는 X 버튼을 클릭했을 때 실행될 함수입니다.

deleteItem 함수를 자세히 살펴 보겠습니다.

  • const newTodo = […this.state.todos]
    state에 넣어둔 todos를 가져와 newTodo에 집어넣어줍니다.

  • newTodo.splice(index,1)
    이는 newTodo배열의 index번째 요소로부터 1개를 삭제한다는 코드입니다.
    자바스크립트의 splice메서드를 사용할 때는 배열.splice(시작할 인덱스,삭제하고 싶은 요소 갯수) 형식을 따릅니다.

  • this.setState({todos:newTodo})
    요소를 삭제한 newTodo배열을 state의 todos값으로 저장합니다.


Todo.js 수정하기

const TodoItem= ({text,isComplete,changeComplete,deleteItem}) => (
    <View style={styles.todoContainer}>
        <View>
            <View style={styles.objContainer}>
                <View style={styles.textContainer}>
                    <TouchableOpacity
                        onPress={changeComplete}>  
                        <AntDesign name={isComplete?"checksquare":"checksquareo"} size={30} style={styles.check}/>
                    </TouchableOpacity>
                    <Text style={styles.todos}>{text}</Text>
                </View>
                <TouchableOpacity
												onPress={deleteItem}>  
                    <AntDesign name="close" size={20}/>
                </TouchableOpacity>
            </View>
        </View>
    </View>
)

props값 중 deleteItem을 받아와 설정해줍니다.

결과는 다음과 같습니다.