12.15강의 10분 Edit페이지에서 삭제하기(onDelete) 기능 질문

TypeError: onDelte is not a function
onDelete를 함수로 인식하지 못하고 있다고 합니다. 오탈자가 문제인건지 잘 모르겠습니다....
import "./App.css";
import { useReducer, useRef, createContext } from "react";
import { Route, Routes } from "react-router-dom";
import Home from "./pages/Home";
import Diary from "./pages/Diary";
import New from "./pages/New";
import Notfound from "./pages/Notfound";
import Edit from "./pages/Edit";
// 1. "/" : 모든 일기를 조회하는 Home 페이지
// 2. "/new" : 새로운 일기를 작성하는 New 페이지
// 3. "/diary" : 일기를 상세히 조회하는 Diary 페이지
const mockData = [
{
id: 1,
createdDate: new Date("2024-11-04").getTime(),
emotionId: 1,
content: "1번 일기 내용",
},
{
id: 2,
createdDate: new Date("2024-11-03").getTime(),
emotionId: 2,
content: "2번 일기 내용",
},
{
id: 3,
createdDate: new Date("2024-10-07").getTime(),
emotionId: 3,
content: "3번 일기 내용",
},
];
function reducer(state, action) {
switch (action.type) {
case "CREATE":
return [action.data, ...state];
case "UPDATE":
return state.map((item) => {
String(item.id) === String(action.id) ? action.data : item;
});
case "DELETE":
return state.filter((item) => String(item.id) !== String(action.id));
default:
return state;
}
}
export const DiaryStateContext = createContext();
export const DiaryDispatchContext = createContext();
function App() {
const [data, dispatch] = useReducer(reducer, mockData);
const idRef = useRef(4);
//기본 일기 추가
const onCreate = (createdDate, emotionId, content) => {
dispatch({
type: "CREATE",
data: {
id: idRef.current++,
createdDate,
emotionId,
content,
},
});
};
// 기존 일기 수정
const onUpdate = (id, createdDate, emotionId, content) => {
dispatch({
type: "UPDATE",
data: {
id,
createdDate,
emotionId,
content,
},
});
};
// 기존 일기 삭제
const onDelete = (id) => {
dispatch({
type: "DELETE",
id,
});
};
return (
<>
<DiaryStateContext.Provider value={data}>
<DiaryDispatchContext.Provider value={{ onCreate, onUpdate, onDelete }}>
<Routes>
<Route path="/" element={<Home />} />
<Route path="/new" element={<New />} />
<Route path="/diary/:id" element={<Diary />} />
<Route path="/edit/:id" element={<Edit />} />
<Route path="*" element={<Notfound />} />
</Routes>
</DiaryDispatchContext.Provider>
</DiaryStateContext.Provider>
</>
);
}
export default App;
import Header from "../components/Header";
import Button from "../components/Button";
import Editor from "../components/Editor";
import { useParams, useNavigate } from "react-router-dom";
import { useContext } from "react";
import { DiaryDispatchContext } from "../App";
const Edit = () => {
const params = useParams();
const nav = useNavigate();
const { onDelte } = useContext(DiaryDispatchContext);
const onClickDelete = () => {
if (window.confirm("일기를 정말 삭제할까요? 다시 복구되지 않아요!")) {
//일기 삭제 로직
//console.log(params.id);
onDelte(params.id);
nav("/", { replace: true });
}
};
return (
<div>
<Header
title={"일기 수정하기"}
leftChild={<Button onClick={() => nav(-1)} text={"< 뒤로 가기"} />}
rightChild={
<Button onClick={onClickDelete} text={"삭제하기"} type={"NEGATIVE"} />
}
/>
<Editor />
</div>
);
};
export default Edit;
Answer 2
0
감사합니다
혹시 onUpdate가 이상한데 혹시 오탈자가 있을까봐 몇 번이나 지우고 다시 작성해봤지만 계속 오류가 나서 질문드립니다.
import Header from "../components/Header";
import Button from "../components/Button";
import Editor from "../components/Editor";
import { useParams, useNavigate } from "react-router-dom";
import { useContext } from "react";
import { DiaryDispatchContext } from "../App";
import useDiary from "../hooks/useDiary";
const Edit = () => {
const params = useParams();
const nav = useNavigate();
const { onDelete, onUpdate } = useContext(DiaryDispatchContext);
const curDiaryItem = useDiary(params.id);
const onClickDelete = () => {
if (window.confirm("일기를 정말 삭제할까요? 다시 복구되지 않아요!")) {
//일기 삭제 로직
//console.log(params.id);
onDelete(params.id);
nav("/", { replace: true });
}
};
const onSubmit = (input) => {
if (window.confirm("일기를 정말 수정할까요?")) {
onUpdate(
params.id,
input.createdDate.getTime(),
input.emotionId,
input.content
);
}
nav("/", { replace: true });
};
return (
<div>
<Header
title={"일기 수정하기"}
leftChild={<Button onClick={() => nav(-1)} text={"< 뒤로 가기"} />}
rightChild={
<Button onClick={onClickDelete} text={"삭제하기"} type={"NEGATIVE"} />
}
/>
<Editor initData={curDiaryItem} onSubmit={onSubmit} />
</div>
);
};
export default Edit;
프론트엔드 학습 수준 문의
0
9
1
리액트 챕터별 코드에서 eslint 설정파일이 없어요
0
34
2
데이터 로딩중 화면만 계속 나와요!!
0
47
2
퍼블리셔일경우 어느정도 수준까지 강의를 들어야할까요
0
71
2
이후의 커리큘럼 문의
0
97
2
실슬환경 설정에서 save후 console.log 부분이 새로고침이 안되는현상입니다.
0
46
2
최적화 관련 질문있습니다 (useMemo 등)
0
81
3
프로바이더 컴포넌트의 위치는 어떤 기준인가요?
1
77
3
Date 객체에 관련하여 질문드립니다.
0
80
2
리액트 개정판 교재 질문
0
56
2
예제코드가 안나와요!
0
72
2
select a variant 선택에서 javascript와 javascript+react compiler 중 무엇을 선택해야하나요? com
0
101
2
onMouseEnter 관련 문의 드립니다
0
87
3
배열의 렌더링 관련 질문 드립니다.
0
69
2
2:40초 refObj를 콘솔로 출력시 오류가 발생합니다.
0
108
2
TS, 리액트 강의중에 뭘 먼저 수강하는게 좋을까요?
0
130
2
useCallback 적용한 onCreate, onUpdate, onDelete 함수..
0
65
1
vs code 자동완성관련 문의
0
103
2
91강 useEffect내에서 상태변화함수 호출시 발생하는 에러
1
173
2
87강 필터 함수 질문
0
64
2
useRef, useState count 비교
0
62
2
안된다고했던 이유가 무엇이었는지 모르겠습니다
0
84
2
85강에서 객체를 왜 클래스로 만들어서 new 하지 않는건지 궁금합니다.
0
72
2
투두리스트 실습을 충실히 진행한 상태에서 감정일기장 실습을 따라할 필요가 있을까요?
0
53
2


