React Router

hyena_leeยท2023๋…„ 1์›” 25์ผ
0

React

๋ชฉ๋ก ๋ณด๊ธฐ
4/10
post-thumbnail
post-custom-banner

๐ŸŒ–๋ผ์šฐํŒ…์ด๋ž€?

  • ์‚ฌ์šฉ์ž๊ฐ€ ์š”์ฒญํ•œ URL์— ๋”ฐ๋ผ ํ•ด๋‹น URL์— ๋งž๋Š” ํŽ˜์ด์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ.
  • ๋ฆฌ์•กํŠธ์—์„œ๋Š” ๋ผ์šฐํŒ… ๊ด€๋ จ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋งŽ์ด ์žˆ๋Š”๋ฐ, ์ด์ค‘ ๊ฐ€์žฅ ๋งŽ์ด ์“ฐ์ด๋Š” ๋ฆฌ์•กํŠธ ๋ผ์šฐํ„ฐ(React Router)๋ฅผ ์‚ฌ์šฉํ•ด๋ณด๋ ค ํ•œ๋‹ค.

๐ŸŒŽ๋ฆฌ์•กํŠธ ๋ผ์šฐํ„ฐ(React Router)

  • ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ์ฃผ์†Œ๋ฅผ ๊ฐ์ง€ํ•˜๋Š” ์—ญํ• ์„ ํ•˜๋ฉฐ, ์—ฌ๋Ÿฌ ํ™˜๊ฒฝ์—์„œ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ์—ฌ๋Ÿฌ ์ข…์œ ์˜ ๋ผ์šฐํ„ฐ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.
  • ์ด์ค‘ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๋ผ์šฐํ„ฐ ์ปดํฌ๋„ŒํŠธ๋Š” BrowserRouter์™€ HashRouter์ด๋‹ค.

1) ์ข…๋ฅ˜

  • BrowserRouter : HTML5๋ฅผ ์ง€์›ํ•˜๋Š” ๋ธŒ๋ผ์šฐ์ €์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ์ง€ ํ•œ๋‹ค.
  • HashRouter ํ•ด์‹œ ์ฃผ์†Œ(http://goddaehee.tistory.com/#test )๋ฅผ ๊ฐ์ง€ ํ•œ๋‹ค

2) ์„ค์น˜

  • npm: npm install react-router-dom
  • yarn:yarn add react-router-dom

3) ์‚ฌ์šฉ ์˜ˆ์‹œ

ex) App.js


๐ŸŒŽ Routes, Route ์ปดํฌ๋„ŒํŠธ

: ๊ฒฝ๋กœ ๋งค์นญํ•ด์ฃผ๋Š” ์—ญํ• 

  • ,๋Š” App()ํ•จ์ˆ˜์˜ ์ปดํฌ๋„ŒํŠธ ์•ˆ์— ์ง‘์–ด๋„ฃ๋Š”๋‹ค.

  • ์ปดํฌ๋„ŒํŠธ๋Š” ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฐ์‹ธ๊ณ , ๊ทธ์ค‘ ๊ฒฝ๋กœ๊ฐ€ ์ผ์น˜ํ•˜๋Š” ๋‹จ ํ•˜๋‚˜์˜ ๋ผ์šฐํ„ฐ๋งŒ ๋ Œ๋”๋ง ์‹œํ‚ค๋Š” ์—ญํ• 

  • ๋ฅผ ์‚ฌ์šฉ ์•ˆํ•˜๋ฉด ๋งค์นญ๋˜๋Š” ๋ชจ๋“  ์š”์†Œ๋ฅผ ๋ Œ๋”๋งํ•จ

  • ์ปดํฌ๋„ŒํŠธ๋Š” path ์†์„ฑ์œผ๋กœ ํ•ด๋‹น path ์—์„œ ์–ด๋–ค ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ณด์—ฌ์ค„์ง€ ์ •ํ•จ

    <Route path="/mypage" element={} />
    ๋‹จ, ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ •ํ•ด์ฃผ๋Š” URL ๊ฒฝ๋กœ์™€ ์ผ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ์ž‘๋™ํ•จ.


:๊ฒฝ๋กœ๋ฅผ ์—ฐ๊ฒฐํ•ด ์ฃผ๋Š” ์—ญํ• 
: ๊ฐ ์ปดํฌ๋„ŒํŠธ ๋ฐ”๊นฅ์— to ์†์„ฑ์œผ๋กœ Route์˜ path ์†์„ฑ๊ณผ ์ผ์น˜ํ•˜๋Š” ์ฃผ์†Œ ์ž‘์„ฑ
์›น ํŽ˜์ด์ง€์—์„œ๋Š” ์›๋ž˜ ๋งํฌ๋ฅผ ๋ณด์—ฌ์ค„ ๋•Œ aํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ํ•˜์ง€๋งŒ aํƒœ๊ทธ๋Š” ํด๋ฆญ์‹œ ํŽ˜์ด์ง€๋ฅผ ์ƒˆ๋กœ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ๋•Œ๋ฌธ์— ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

  • Link ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ์ƒ๊น€์ƒˆ๋Š” aํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ, History API๋ฅผ ํ†ตํ•ด ๋ธŒ๋ผ์šฐ์ € ์ฃผ์†Œ์˜ ๊ฒฝ๋กœ๋งŒ ๋ฐ”๊พธ๋Š” ๊ธฐ๋Šฅ์ด ๋‚ด์žฅ๋˜์–ด ์žˆ๋‹ค.
  • ๋ฌธ๋ฒ• : ๋งํฌ๋ช…
  • import { Link } from 'react-router-dom';

ํŽ˜์ด์ง€ ์ „ํ™˜์„ ํ†ตํ•ด ํŽ˜์ด์ง€๋ฅผ ์ƒˆ๋กœ ๋ถˆ๋Ÿฌ์˜ค์ง€ ์•Š๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•˜์—ฌ ํŽ˜์ด์ง€์˜ ์ฃผ์†Œ๋งŒ ๋ณ€๊ฒฝ (HTML5 History API๋ฅผ ์ด์šฉ)


๐ŸŒžUseNavigate ์ปดํฌ๋„ŒํŠธ

  • useNavigate๋Š” ํŽ˜์ด์ง€๋ฅผ ์ด๋™ํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.
  • Link๋ฅผ ์จ๋„ ํŽ˜์ด์ง€ ์ด๋™์„ ์‹œํ‚ฌ ์ˆ˜ ์žˆ์ง€๋งŒ ๋‹จ์ˆœํ•˜๊ฒŒ ์ด๋™๋งŒ ์‹œ์ผœ์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ Link๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹๊ณ  useNavigate๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํŠน์ • ์ด๋ฒคํŠธ๊ฐ€ ์‹คํ–‰๋์„ ๋•Œ ๋™์ž‘ํ•˜๋„๋ก ํ•˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€์ ์ธ ๋กœ์ง์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ useNavigate๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

์‚ฌ์šฉ๋ฐฉ๋ฒ•

๋กœ๊ทธ์ธ์ด ๋˜์–ด ์žˆ์„ ๊ฒฝ์šฐ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด navigate('/mypage')๊ฐ€ ์‹คํ–‰๋˜์–ด mypage๋กœ ์ด๋™ํ•จ

๐Ÿ’ฅ Link์™€ ์ฐจ์ด์ ?
useNavigate ๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ํ†ตํ•ด ํŠน์ • ์กฐ๊ฑด์— ๋”ฐ๋ผ ํŽ˜์ด์ง€๋ฅผ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Œ

profile
์‹ค์ˆ˜๋ฅผ ๋‘๋ ค์›Œ ๋ง๊ณ  ๊ณ„์† ๋„์ „ ํ•˜๋Š” ๊ฐœ๋ฐœ์ž์˜ ์—ฌ์ •!
post-custom-banner

0๊ฐœ์˜ ๋Œ“๊ธ€