React/일정관리 프로젝트

[React TodoList] 컴포넌트 기능 구현하기 - 삭제

Judith Hopps 2023. 3. 14. 17:42
반응형

컴포넌트 삭제 기능 구현하기

 

배열 내장 함수 filter 사용

const array = [1,2,3,4,5,6,7] 

console.log(array.filter(v=>v>3))
//[4,5,6,7]

 

App.js에서 todo 배열에서 id로 항목 지우기

import React , { useState, useCallback } from "react";
import TodoTemplate from "./TodoTemplate";
import TodoInsert from "./TodoInsert";
import TodoList from "./TodoList";

const App = () => {
  (...)
  const onRemove = useCallback(
	 id => {
  	setTodos(todos.filter(todo=>todo.id !== id))
  },[todos] 
)


  return (
  <TodoTemplate> 
      <TodoInsert />
      <TodoList todos={todos} onRemove ={onRemove} />
  </TodoTemplate>
  )
}

export default App;

 

Todolist.js

import React from 'react';
import TodoListItem  from './TodoListItem';
import './TodoList.scss'

const TodoList = ({todos,onRemove}) => {
  return (
    <div className='TodoList'>
      {todos.map(todo => (
         <TodoListItem todo={todo} key={todo.id} onRemove={onRemove} /> 
      ))}  
    </div>
  );
};

export default TodoList;

 

 

todoListItem.js

import React from 'react';
import { 
  MdOutlineCheckBoxOutlineBlank,
  MdOutlineCheckBox,
  MdRemoveCircleOutline } from "react-icons/md";
import cn from 'classnames'
import './TodoListItem.scss'


const TodoListItem = ({todo, onRemove}) => {
  const {id,text,checked} =todo;
  return (
    <div className='TodoListItem'>
      <div className={cn('checkbox',{checked})} >
        {checked? <MdOutlineCheckBox /> : <MdOutlineCheckBoxOutlineBlank />}
        <div className='text'>{text}</div>
      </div>
      <div className='remove' onClick={()=> onRemove(id)}>
        <MdRemoveCircleOutline />
      </div>
    </div>
  );
};

export default TodoListItem;

 

 

 

반응형