[D-7] 항목 삭제기능 구현하기
2020. 1. 25. 20:56ㆍProject D (ToDoList)
반응형
src/
App.js
더보기
import React, { useState, useRef, useCallback } from 'react';
import TodoInsert from './components/TodoInsert';
import TodoList from './components/TodoList';
import TodoTemplate from './components/TodoTemplate';
const App = () => {
const [todos, setTodos] = useState([
{
id: 1,
text: '리액트 기초',
checked: true,
},
{
id: 2,
text: '컴포넌트 스타일링',
checked: true,
},
{
id: 3,
text: '일정 관리 앱 제작',
checked: false,
},
]);
const nextId = useRef(4);
const onInsert = useCallback(
text => {
const todo = {
id: nextId.current,
text,
checked: false,
};
setTodos(todos.concat(todo));
nextId.current += 1;
},
[todos],
);
const onRemove = useCallback(
id => {
setTodos(todos.filter(todo => todo.id !== id));
},
[todos],
);
return (
<TodoTemplate>
<TodoInsert onInsert={onInsert} />
<TodoList todos={todos} onRemove={onRemove} />
</TodoTemplate>
);
};
export default App;
src/components
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;
src/components
TodoListItem.js
더보기
import React from 'react';
import {
MdCheckBoxOutlineBlank,
MdCheckBox,
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 ? <MdCheckBox /> : <MdCheckBoxOutlineBlank />}
<div className="text">{text}</div>
</div>
<div className="remove" onClick={() => onRemove(id)}>
<MdRemoveCircleOutline />
</div>
</div>
);
};
export default TodoListItem;
항목 삭제기능 구현 테스트
반응형
'Project D (ToDoList)' 카테고리의 다른 글
[D-8] 항목 수정기능 구현하기 (0) | 2020.01.25 |
---|---|
[D-6] 항목 추가기능 구현하기 (0) | 2020.01.25 |
[D-5] 기본 기능 구현하기 (0) | 2020.01.25 |
[D-4] 컴포넌트 스타일링 (0) | 2020.01.24 |
[D-3] 컴포넌트 UI 구성 (0) | 2020.01.24 |