useParams hook 사용
각 일기의 상세페이지를 보려면 /diary/1 과 같이 주소가 연결되어야함

function App() {
return (
<BrowserRouter>
<div className="App">
<h2>제목입니다.</h2>
<Routes>
<Route path="/" element={<Home />} />
<Route path="/new" element={<New />} />
<Route path="/edit" element={<Edit />} />
{/* /:id = path variable 부분 */}
<Route path="/diary" element={<Diary />} />
</Routes>
<RouteTest />
</div>
</BrowserRouter>
);
}

단,
<Route path="/diary" element={<Diary />} />와 같이 url을 작성해놓으면 항상 /diary/id 의 형식으로 url을 입력받아야함. /diary는 접속할 수 없음<Route path="/diary/:id" element={<Diary />} /> <Route path="/diary" element={<Diary />} />/diary와 /diary/:id 모두 url 연결주면 됨
(이번 프로젝트에서는 항상 /diary/id 의 형식으로 연결되기 때문에 제외)
// Diary.js
import { useParams } from "react-router-dom";
const Diary = () => {
/*
useParams를 이용하면, App.js에서 전달되는
path variable들(ex. /id)을 모아서 객체로 전달해줌.
Diary.js에서는 해당 path variable을 {id}로 꺼내서 사용
*/
const { id } = useParams();
console.log(id);
return (
<div>
<h1>Diary</h1>
<div>이곳은 일기 상세페이지 입니다.</div>
</div>
);
};
export default Diary;

: /edit?id=22&mode=dart 과 같이 물음표 키워드로 name=value를 엮어서 데이터를 전송하는 방법

/edit 뒤에 Query String을 사용하여 url을 날린 경우, edit 컴포넌트가 정상적으로 노출됨
? 뒤 경로는 페이지 라우팅에 영향을 주지 않음
Query String 받아서 사용
// edit.js
import { useSearchParams } from "react-router-dom";
const Edit = () => {
const [searchParams, setSearchParams] = useSearchParams();
const id = searchParams.get("id");
console.log(id);
const mode = searchParams.get("mode");
console.log(mode);
return (
<div>
<h1>Edit</h1>
<div>이곳은 일기 수정페이지 입니다.</div>
</div>
);
};
export default Edit;

//edit.js
import { useSearchParams } from "react-router-dom";
const Edit = () => {
const [searchParams, setSearchParams] = useSearchParams();
const id = searchParams.get("id");
console.log(id);
const mode = searchParams.get("mode");
console.log(mode);
return (
<div>
<h1>Edit</h1>
<div>이곳은 일기 수정페이지 입니다.</div>
<button onClick={() => setSearchParams({ who: "dalbong" })}>
QS 변경
</button>
</div>
);
};
export default Edit;

import { useNavigate, useSearchParams } from "react-router-dom";
const Edit = () => {
const [searchParams, setSearchParams] = useSearchParams();
const navigate = useNavigate();
const id = searchParams.get("id");
console.log(id);
const mode = searchParams.get("mode");
console.log(mode);
return (
<div>
<h1>Edit</h1>
<div>이곳은 일기 수정페이지 입니다.</div>
<button onClick={() => setSearchParams({ who: "dalbong" })}>
QS 변경
</button>
<button
onClick={() => {
navigate("/");
}}
>
HOME으로 이동
</button>
</div>
);
};
export default Edit;

//edit.js
<button onclick={() => { navigate(-1); }}>
뒤로가기
</button>