-
[React TodoList] 컴포넌트 기능 구현하기 - 체크React/일정관리 프로젝트 2023. 3. 14. 17:49
컴포넌트 체크 기능 구현하기
onToggle 구현하기
onToggle이란 클래스명에 있으면 삭제, 없으면 추가하는 것이다.
App.js에서 todo 상태 사용하기
import React , {useCallback, useState,useRef} from "react"; import TodoTemplate from "./TodoTemplate"; import TodoInsert from "./TodoInsert"; import TodoList from "./TodoList"; const App = () => { (...) const onToggle = useCallback( id => { setTodos( todos.map(todo => todo.id === id ? {...todo, checked:!todo.checked}:todo,) ) },[todos] ) return ( <TodoTemplate> <TodoInsert onInsert={onInsert}/> <TodoList todos={todos} onRemove={onRemove} onToggle={onToggle} /> </TodoTemplate> ) } export default App;
TodolistItem.js
import React from 'react'; import TodoListItem from './TodoListItem'; import './TodoList.scss' const TodoList = ({todos,onRemove,onToggle}) => { return ( <div className='TodoList'> {todos.map(todo => ( <TodoListItem todo={todo} key={todo.id} onRemove={onRemove} onToggle={onToggle} /> ))} </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, onToggle }) => { const {id,text,checked} =todo; return ( <div className='TodoListItem'> <div className={cn('checkbox',{checked})} onClick={()=>onToggle(id) > {checked? <MdOutlineCheckBox /> : <MdOutlineCheckBoxOutlineBlank />} <div className='text'>{text}</div> </div> <div className='remove' onClick={()=>onRemove(id)} > <MdRemoveCircleOutline /> </div> </div> ); }; export default TodoListItem;
'React > 일정관리 프로젝트' 카테고리의 다른 글
[React TodoList] 불변성, 최적화, 렌더링 최적화 (0) 2023.03.15 [React TodoList] 많은 데이터 렌더링, React.memo, 성능 최적화 (0) 2023.03.14 [React TodoList] 컴포넌트 기능 구현하기 - 삭제 (0) 2023.03.14 [React TodoList] 컴포넌트 기능 구현하기 - 추가 (0) 2023.03.14 [React TodoList] 컴포넌트 UI 구성 - TodoInsert, TodoList, TodoListItem (0) 2023.03.14