티스토리 뷰
728x90
2020/12/08 - [React] - [React] 14. 리덕스로 TodoList구현하기 01
2020/12/08 - [React] - [React] 15. 리덕스로 TodoList구현하기 02
TodoList 수정하기 기능 구현
저는 input에 readOnly속성과 onBlur 함수를 사용하여 TodoList의 수정 기능을 구현하였습니다.!
연필 모양의 버튼을 클릭하면 텍스트가 수정될 수 있도록 readOnly의 값을 false로 변경하고, <TextBox>의 내용이 변경될 수 있게 합니다. onBlur 함수를 사용하여 <TextBox>의 포커스가 사라지면 변경된 텍스트 값을 dispatch(todoUpdate(id, updateText))를 사용하여 스토어에 반영해주었습니다.
import React, { useCallback, useState } from "react";
import {
Button,
CheckBox,
TextBox,
TodoItemBox,
} from "../Styled/todoItem-styled";
import { useDispatch } from "react-redux";
import { todoRemove, todoToggle, todoUpdate } from "../Reducer/Todo";
import { FaRegSquare, FaRegCheckSquare } from "react-icons/fa";
import { TiDeleteOutline } from "react-icons/ti";
import { BiPencil } from "react-icons/bi";
const TodoItem = ({ todo }) => {
const { id, text, isCompleted } = todo;
const [readOnly, setReadOnly] = useState(true);
const [updateText, setUpdateText] = useState(text);
const dispatch = useDispatch();
const onChangeText = useCallback(
(e) => {
const { value } = e.target;
setUpdateText(value);
},
[updateText]
);
const updateTodo = () => {
if (!isCompleted) {
setReadOnly(false);
}
};
return (
// 체크 박스
<TodoItemBox>
<CheckBox onClick={() => dispatch(todoToggle(id))}>
{isCompleted ? (
<FaRegCheckSquare size="25px" color="#84a98c" />
) : (
<FaRegSquare size="25px" />
)}
</CheckBox>
// 인풋(텍스트)
<TextBox
name="text"
readOnly={readOnly}
defaultValue={text}
checked={isCompleted}
onChange={onChangeText}
onBlur={() => dispatch(todoUpdate(id, updateText))}
/>
// 수정 버튼
{!isCompleted ? (
<Button onClick={updateTodo}>
<BiPencil size="25px" color="#a5a58d" />
</Button>
) : (
<></>
)}
// 삭제 버튼
<Button onClick={() => dispatch(todoRemove(id))}>
<TiDeleteOutline size="30px" color="#e56b6f" />
</Button>
</TodoItemBox>
);
};
export default TodoItem;
728x90
'REACT' 카테고리의 다른 글
Tanstack Router 사용하기 01 (6) | 2024.07.24 |
---|---|
[React] 17. localStorage와 sessionStorage 사용해보기 (1) | 2020.12.28 |
[React] 15. 리덕스로 TodoList구현하기 02 (0) | 2020.12.08 |
[React] 14. 리덕스로 TodoList구현하기 01 (1) | 2020.12.08 |
[React] 13. 리덕스(Redux) 사용해서 카운터 만들기 (0) | 2020.12.04 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크