simple diary : edit data
This commit is contained in:
@@ -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>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user