728x90
1. DiaryItem.js에 삭제버튼 생성
2. App.js에 onDelete 함수 생성
3. props로 DiaryList.js에 onRemove 함수 전달, DiaryItem에 또 전달
DiaryItem.js
- props에 onDelete 추가
- 삭제하기 button 생성 후 windo.confirm창 추가
const DiaryItem = ({
author,
content,
emotion,
created_date,
id,
onDelete,
}) => {
return (
<div className="DiaryItem">
<div className="info">
<span>
작성자 : {author} | 감정점수 : {emotion}
</span>
<br />
<span className="date">{new Date(created_date).toLocaleString()}</span>
</div>
<div className="content">{content}</div>
<button
onClick={() => {
if (window.confirm(`${id}번째 일기를 정말 삭제하시겠습니까?`)) {
onDelete(id);
}
}}
>
삭제하기
</button>
</div>
);
};
export default DiaryItem;
App.js
- onDelete 함수 추가
- DiaryList에 props로 전달
import { useState, useRef } from "react";
import "./App.css";
import DiaryEditor from "./DiaryEditor";
import DiaryList from "./DiaryList";
// const dummyList = [...
function App() {
const [data, setData] = useState([]);
const dataId = useRef(0);
const onCreate = (author, content, emotion) => {
const created_date = new Date().getTime();
const newItem = {
author,
content,
emotion,
created_date,
id: dataId.current,
};
dataId.current += 1;
setData([newItem, ...data]);
};
const onDelete = (targetId) => {
console.log(`${targetId}가 삭제되었습니다.`);
const newDiaryList = data.filter((it) => it.id !== targetId);
setData(newDiaryList);
};
return (
<div className="App">
<DiaryEditor onCreate={onCreate} />
<DiaryList onDelete={onDelete} diaryList={data} />
</div>
);
}
export default App;
DiaryList.js
- props로 DiaryItem에 onDelete 전달
import DiaryItem from "./DiaryItem";
const DiaryList = ({ diaryList, onDelete }) => {
return (
<div className="DiaryList">
<div>{diaryList.length}개의 일기가 있습니다.</div>
<div>
{diaryList.map((it) => (
<DiaryItem key={it.id} {...it} onDelete={onDelete} />
))}
</div>
</div>
);
};
DiaryList.defaultProps = {
diaryList: [],
};
export default DiaryList;
한입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지 - 인프런 | 강의
개념부터 독특한 프로젝트까지 함께 다뤄보며 자바스크립트와 리액트를 이 강의로 한 번에 끝내요. 학습은 짧게, 응용은 길게 17시간 분량의 All-in-one 강의!, 리액트, 한 강의로 끝장낼 수 있어요.
www.inflearn.com
728x90
'🤯TIL > React' 카테고리의 다른 글
[한입 크기로 잘라 먹는 리액트] React Lifecycle 제어하기 - useEffect (1) | 2023.11.19 |
---|---|
[한입 크기로 잘라 먹는 리액트] React에서 배열 사용하기 4 - 데이터 수정하기 (1) | 2023.11.19 |
[한입 크기로 잘라 먹는 리액트] React에서 배열 사용하기 2 - 데이터 추가하기 (0) | 2023.11.19 |
[한입 크기로 잘라 먹는 리액트] React에서 배열 사용하기 1 - 리스트 렌더링 (조회) (2) | 2023.11.19 |
[한입 크기로 잘라 먹는 리액트] React에서 DOM 조작하기 - useRef (0) | 2023.11.17 |