import { BrowserRouter, Route, Routes } from "react-router-dom";
import Main from "./pages/main";
import Detail from "./pages/detail";
const App = () => {
return (
<BrowserRouter>
<Routes>
<Route path="/" element={<Main />} />
<Route path="/:id" element={<Detail />} />
</Routes>
</BrowserRouter>
);
};
export default App;
-> 동적 라우팅 설정
import { Link } from "react-router-dom";
const TodoCard = ({ todo }) => {
return (
<li className="h-12 flex items-center text-xl">
<span className="w-1/12 text-right">{todo.id}</span>
<span className="w-8/12 pl-2">{todo.title}</span>
<Link
to={`/${todo.id}?title=${todo.title}&is-done=${todo.isDone}`}
className="w-3/12 hover:font-bold"
>
Detail
</Link>
</li>
);
};
export default TodoCard;
to={/${todo.id}?title=${todo.title}&is-done=${todo.isDone}
} -> 쿼리스트링 사용
import { useEffect } from "react";
import { useParams, useSearchParams } from "react-router-dom";
const Detail = () => {
const { id } = useParams();
const [searchParams] = useSearchParams();
const title = searchParams.get("title");
const isDone = searchParams.get("is-done");
useEffect(() => console.log(id), [id]);
useEffect(() => console.log(title), [title]);
useEffect(() => console.log(isDone), [isDone]);
return (
<div className="bg-blue-100 min-h-screen flex justify-center items-center">
<span>{id}</span>
<span>{title}</span>
</div>
);
};
export default Detail;
디테일 페이지를 만들어서 app.jsx의 라우트에 부착했음.
디테일 페이지는 컴포넌트들이랑 다르게 데이터가 없음.
데이터를 뭐로부터 받느냐? 주소창으로부터 받기로 함
2(params)?title=(물음표 뒤에 내용은 쿼리스트링) 주소로 받음
리액트라우터돔 사용해
useparam은 객채 :
searchparam은 배열로 받아옴
title이랑 is-done값을 받아서
useEffect로 값들이 잘 들어오는지 확인하고
return으로 키값을 확인해주었다.
const onClickDel = () => {
const localTodos = localStorage.getItem("todos");
if (!localTodos) return;
const parsedTodos = JSON.parse(localTodos);
const deletedTodos = parsedTodos.filter((v) => {
if (v.id !== +id) {
return v;
}
});
Delete를 하려면 비교를 해야 함.
https://www.acmicpc.net/problem/30621
현재는 local storage에 todolist를 만들어서 관리하고 있는데
실제로는 백엔드랑 데이터베이스 만들어서 관리함
DB에 다 있을텐데 백엔드는 DB 출입 권한이 있음.
백엔드 입장에서 접근가능한 데이터의 권한이 있고 그 DB에만 접근할 수 있음.
우리가 여태까지 했던 건 Front에서만 구현한 것.
BackEnd까지 배우면 백엔드에 저장되는 거고
DB까지 배우면 DB까지 저장되는 것.
Redux를 써서 뭔가를 할 수 있기도 함.