React/일정관리 프로젝트
[React TodoList] 컴포넌트 기능 구현하기 - 체크
Judith Hopps
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;
반응형