๐ค Link ๋ ํน์ ์ฃผ์๋ก ์ด๋ํด์ฃผ๋ ํ๊ทธ์๋ค๋ฉด, Navigate ๋ ํน์ ํ๋์ ํ์ ๋ ํด๋น ์ฃผ์๋ก ์ด๋ํด์ค ์ ์๊ฒ ๋ง๋ค์ด์ค๋๋ค.
1. useNavigate ์ฐ๊ธฐ
useNavigate๋ ์์์ด ์ ์ถ๋๊ฑฐ๋ ํน์ event๊ฐ ๋ฐ์ํ ๋, url์ ์กฐ์ํ ์ ์๋ interface๋ฅผ ์ ๊ณตํฉ๋๋ค.
import { useNavigate } from 'react-router-dom';
function Func() {
const navigate = useNavigate();
const onClickImg = () => {
navigate(`/comment/id/๋ฑ๋ฑ ๋ด๊ฐ ์ํ๋ ์ฃผ์`);
};
return (
<img src={...} alt={...} onClick={onClickImg} />
);
}
export default Func;
์ด๋ ๊ฒ ์์ฑํ๋ค๊ณ ํฉ๋๋ค. ์ด ์ฝ๋์์์ url์ด www.naver.com ์ด์๋ค๋ฉด ์ด๋ www.naver.com/comment/id... ์ผ๋ก ๋ฐ๋์์ ๊ฒ์ ๋๋ค.
useNavigate์๋ ๋ ๊ฐ์ง ํน์ง์ด ์์ต๋๋ค.
(1) useNavigate์ ์ธ์๋ค
navigate("../success", { replace: true});
์ฒซ ๋ฒ์งธ ์ธ์๋ก๋ ์ฃผ์๋ฅผ ๋ฐ์ผ๋ฉฐ ๋ ๋ฒ์งธ ์ธ์๋ก { replace, state } ์ธ์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- replace (true or false)
true๋ฅผ ์ฌ์ฉํ๋ค๋ฉด, navigate์ ์ ํ ์ฃผ์๋ก ๋์ด๊ฐ ํ ๋ค๋ก๊ฐ๊ธฐ๋ฅผ ํ๋๋ผ๋ ๋ฐฉ๊ธ์ ํ์ด์ง๋ก ๋์์ค์ง ์์ต๋๋ค. ์ด ๋๋ ์์ ์ ๋ฉ์ธ ํ์ด์ง ("/")๋ก ๋์์ค๊ฒ ๋ฉ๋๋ค. false๋ ๋ค๋ก๊ฐ๊ธฐ๊ฐ ๊ฐ๋ฅํ๋ฉฐ ์ด ๊ฒ์ด ๊ธฐ๋ณธ ๊ฐ์ธ ๋ฏํฉ๋๋ค.
- state (any)
state๊ฐ ํ์ํ๋ค๋ฉด ์ฌ์ฉํ ์ ์๋ค๊ณ ํฉ๋๋ค๋ง... ์ ๋ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง๋ ์ ๋ชจ๋ฅด๊ฒ ๊ณ ์ ๋๋ก ์ ์ ์๋ ๋ฐฉ๋ฒ๋ ์๋๊ตฐ์...ใ
(2) useHistory์ ๊ธฐ๋ฅ๋ ํฌํจ
useNavigate๋ react v6 ์์ useHistory ๊ฐ ๋ณํํ ๊ฒ์ ๋๋ค. ์ด ๋ useHistory ์์ ์ฌ์ฉํ๋, window์ history ๋ฅผ ์ด์ฉํ navigate ๊ธฐ๋ฅ๋ ํ ์ ์๊ฒ ๋์์ต๋๋ค.
<>
<button onClick={() => navigate(-2)}>
Go 2 pages back
</button>
<button onClick={() => navigate(-1)}>
Go back
</button>
<button onClick={() => navigate(1)}>
Go forward
</button>
<button onClick={() => navigate(2)}>
Go 2 pages forward
</button>
</>
History๋ ์ธ์ ๊ธฐ๋ก(ํ์ด์ง ๋ฐฉ๋ฌธ ๊ธฐ๋ก)์ ๋ํ ์ ๊ทผ ๋ฐฉ๋ฒ๊ณผ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ ๋๋ค. ๋ํ ์ธ์ (session)์ด๋ ์น ์ฌ์ดํธ์ ์ฌ๋ฌ ํ์ด์ง์ ๊ฑธ์ณ ์ฌ์ฉ๋๋ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ๋ฐฉ๋ฒ์ ์๋ฏธํ์ง์. ๊ฐ๋จํ๊ฒ๋ ๊ทธ๋ฅ ์ด๊ฑธ๋ก ๋ค๋ก๊ฐ๊ธฐ ์์ผ๋ก๊ฐ๊ธฐ๊ฐ ๋๋ค๊ณ ์๊ณ ๊ณ์๋ฉด ๋๋๋ฐ ๋์ฑ ์๊ณ ์ถ์ผ์๋ค๋ฉด ์ด์ฉ ์ ์์ด ์๋ ํ์ด์ง๋ก ๊ฐ๋๋ค.
2022.01.21 - [๐ฒ For Front/๐ฒFront Knowledge] - Web History ๋ ๋ฌด์์ธ๊ฐ? (History API)
2. Navigate ์ฐ๊ธฐ
<Navigate> ์์๋ ๋ ๋๋ง๋ ๋ ํ์ฌ ์์น๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค. useNavigate๋ฅผ ๋๋ฌ์ผ component wrapper ์ด๋ฉฐ props์ ๋์ผํ ๋ชจ๋ ์ธ์๋ฅผ ํ์ฉํฉ๋๋ค. ์ด ํ๊ทธ ์ญ์ to, replace, state ๋ฅผ ๋ชจ๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.
import { Navigate } from 'react-router-dom';
function Func() {
const onClickImg = () => {
return <Navigate to="/login" />;
}
return (
<img src={...} alt={...} onClick={onClickImg} />
);
}
export default Func;
Note: This API is mostly useful in React.Component subclasses that are not able to use hooks. In functional components, we recommend you use the `useNavigate` hook instead.
-์ฐธ๊ณ : ์ด API๋ ๋๋ถ๋ถ ํํฌ๋ฅผ ์ฌ์ฉํ ์ ์๋ React.Component ํ์ ํด๋์ค์์ ์ ์ฉํฉ๋๋ค. ๊ธฐ๋ฅ์ ๊ตฌ์ฑ ์์์์๋ ๋์ `useNavigate` ํํฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.-
๋ผ๊ณ ๊ณต์ ํํ์ด์ง์์๋ ์๊ธฐํฉ๋๋ค. ํ์ ํด๋์ค๋ฅผ ์ํด์ ์ ์ฉํ๊ฒ ์ฐ์ด๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ฅ๊ฐํด์๋ useNavigate๋ฅผ ์ฐ๋ผ๊ณ ํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
< ์ถ์ฒ >
[React] react-router-dom v6 ์ ๊ทธ๋ ์ด๋ ๋๋ฉด์ ๋ฌ๋ผ์ง ๊ฒ๋ค (https://velog.io/@soryeongk/ReactRouterDomV6)
navigate ๊ณตํ (https://reactrouter.com/docs/en/v6/api#navigate)
useNavigatge ๊ณตํ (https://reactrouter.com/docs/en/v6/api#usenavigate)
๋ฐ์ท ๋ธ๋ก๊ทธ https://basemenks.tistory.com/278
'Programming > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
React npx create-react-app (0) | 2022.04.05 |
---|---|
[React] npx create-react-app ์ค์น์ค๋ฅ "We no longer support global installation of Create React App" (0) | 2022.02.14 |
[์ค๋ฅํด๊ฒฐ] npm ERR! code ERESOLVE (0) | 2021.10.29 |
[์ค๋ฅํด๊ฒฐ] npm ERR! code ERESOLVE (0) | 2021.10.04 |
[REACT] .env ๋ฅผ ์ด์ฉํ ๋ณ์์ ์ธ ๋ฐ ์ฌ์ฉ๋ฒ (0) | 2021.09.07 |