simple diary : edit data

This commit is contained in:
haerong22
2022-04-14 03:08:45 +09:00
parent 8d7ed23f0d
commit e44b2cb702
3 changed files with 70 additions and 15 deletions

View File

@@ -47,16 +47,24 @@ const App = () => {
setData([newItem, ...data]); setData([newItem, ...data]);
}; };
const onDelete = (targetId) => { const onRemove = (targetId) => {
alert(`${targetId}가 삭제되었습니다.`); alert(`${targetId}가 삭제되었습니다.`);
const newDiaryList = data.filter((it) => it.id !== targetId); const newDiaryList = data.filter((it) => it.id !== targetId);
setData(newDiaryList); setData(newDiaryList);
}; };
const onEdit = (targetId, newContent) => {
setData(
data.map((it) =>
it.id === targetId ? { ...it, content: newContent } : it
)
);
};
return ( return (
<div className="App"> <div className="App">
<DiaryEditor onCreate={onCreate} /> <DiaryEditor onCreate={onCreate} />
<DiaryList onDelete={onDelete} diaryList={data} /> <DiaryList onEdit={onEdit} onRemove={onRemove} diaryList={data} />
</div> </div>
); );
}; };

View File

@@ -1,11 +1,44 @@
import { useRef, useState } from "react";
const DiaryItem = ({ const DiaryItem = ({
onDelete, onEdit,
onRemove,
author, author,
content, content,
created_date, created_date,
emotion, emotion,
id, id,
}) => { }) => {
const [isEdit, setIsEdit] = useState(false);
const [localContent, setLocalContent] = useState(content);
const localContentInput = useRef();
const toggleIsEdit = () => setIsEdit(!isEdit);
const handleRemove = () => {
if (window.confirm(`${id}번째 일기를 삭제하시겠습니까?`)) {
onRemove(id);
}
};
const handleQuitEdit = () => {
setIsEdit(false);
setLocalContent(content);
};
const handleEdit = () => {
if (localContent.length < 5) {
localContentInput.current.focus();
return;
}
if (window.confirm(`${id}번째 일기를 수정하시겠습니까?`)) {
onEdit(id, localContent);
toggleIsEdit();
}
};
return ( return (
<div className="DiaryItem"> <div className="DiaryItem">
<div className="info"> <div className="info">
@@ -15,16 +48,30 @@ const DiaryItem = ({
<br /> <br />
<span className="date">{new Date(created_date).toLocaleString()}</span> <span className="date">{new Date(created_date).toLocaleString()}</span>
</div> </div>
<div className="content">{content}</div> <div className="content">
<button {isEdit ? (
onClick={() => { <>
if (window.confirm(`${id}번째 일기를 삭제하시겠습니까?`)) { <textarea
onDelete(id); ref={localContentInput}
} value={localContent}
}} onChange={(e) => setLocalContent(e.target.value)}
> />
삭제하기 </>
</button> ) : (
<>{content}</>
)}
</div>
{isEdit ? (
<>
<button onClick={handleQuitEdit}>수정취소</button>
<button onClick={handleEdit}>수정완료</button>
</>
) : (
<>
<button onClick={handleRemove}>삭제하기</button>
<button onClick={toggleIsEdit}>수정하기</button>
</>
)}
</div> </div>
); );
}; };

View File

@@ -1,13 +1,13 @@
import DiaryItem from "./DiaryItem"; import DiaryItem from "./DiaryItem";
const DiaryList = ({ onDelete, diaryList }) => { const DiaryList = ({ onEdit, onRemove, diaryList }) => {
return ( return (
<div className="DiaryList"> <div className="DiaryList">
<h2>일기 리스트</h2> <h2>일기 리스트</h2>
<h4>{diaryList.length}개의 일기가 있습니다.</h4> <h4>{diaryList.length}개의 일기가 있습니다.</h4>
<div> <div>
{diaryList.map((it) => ( {diaryList.map((it) => (
<DiaryItem key={it.id} {...it} onDelete={onDelete} /> <DiaryItem onEdit={onEdit} key={it.id} {...it} onRemove={onRemove} />
))} ))}
</div> </div>
</div> </div>