React-Router

๊น€๋•…์ฃผยท2021๋…„ 3์›” 25์ผ
0

React

๋ชฉ๋ก ๋ณด๊ธฐ
8/15
post-thumbnail

๐Ÿ’ React-Router

react๋Š” view๋งŒ ๋‹ด๋‹นํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค. ๊ทธ๋ž˜์„œ ๋ผ์šฐํŒ…์„ ๋‹ด๋‹นํ•˜๋Š” react-router๋ฅผ ๋”ฐ๋กœ ์„ค์น˜ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค ์›๋ž˜ ์‹ฑ๊ธ€ํŽ˜์ด์ง€ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜(SPA)๋Š” ์ฃผ์†Œ๊ฐ€ ์—†์–ด ์ ‘์†ํ•˜๊ธฐ ํž˜๋“ค์—ˆ์ง€๋งŒ react-router๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํŽ˜์ด์ง€๋ฅผ ๊นœ๋นก์ž„์ด ์—†์œผ๋ฉด์„œ๋„ ์ฃผ์†Œ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด ํŽ˜์ด์ง€๋ฅผ ๋„˜๊ธธ๋•Œ ํŠน์ • ๋ ˆ์ด์•„์›ƒ์€ ๊ณ ์ •๋˜์–ด์žˆ๊ณ  ๋‚ด์šฉ๋งŒ ๋ฐ”๋€Œ๋ฉฐ ์ฃผ์†Œ๋„ ๊ทธ์— ๋”ฐ๋ผ ๋ฐ”๋€๋‹ค


install


npm install --save react-router

์œ„์™€ ๊ฐ™์ด terminal์— ์ž…๋ ฅํ•ด์ฃผ๋ฉด ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค.


How?


srcํด๋”์•ˆ์— Routes.js , index.js ๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค.

index.js์—์„œ ์„ค์ •์„ ํ•ด์ฃผ๊ณ , Routes.js์—์„œ ๊ฐ ์ปดํฌ๋„ŒํŠธ๋ฅผ import๋ฅผ ํ•˜๊ณ  Router์•ˆ์—์„œ ํŽ˜์ด์ง€๋ฅผ ์ง€์ •ํ•ด์ค€๋‹ค

Router.js

  • <Route> ์š”์ฒญ ๊ฒฝ๋กœ์™€ ๋ Œ๋”๋งํ•  ์ปดํฌ๋„ŒํŠธ๋ฅผ ์„ค์ •ํ•œ๋‹ค
  • <Switch> ํ•˜์œ„ ๋ผ์šฐํ„ฐ ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•œ๋‹ค
  • <Redirect> ์š”์ฒญ ๊ฒฝ๋กœ๋ฅผ ๋‹ค๋ฅธ ๊ฒฝ๋กœ๋กœ ๋ฆฌ๋‹ค์ด๋ ‰์…˜ํ•œ๋‹ค. ์˜ˆ์‹œ๋กœ ์„ค์ •ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ๋กœ ์š”์ฒญ์‹œ Home๊ฒฝ๋กœ๋กœ ์ด๋™ํ•œ๋‹ค

Index.js



๐Ÿ’ Router: match,location,history


Router Props

๊ฐ๊ฐ์˜ Route์™€ ์—ฐ๊ฒฐ๋œ ์ปดํฌ๋„ŒํŠธ์— props๋กœ match, location, history ๋ผ๋Š” ๊ฐ์ฒด๋ฅผ ์ „๋‹ฌํ•˜๊ฒŒ ๋œ๋‹ค. ์•„๋ž˜๋Š” ์ฝ˜์†”๋กœ props๋ฅผ ํ™•์ธํ•ด ๋ณธ ๊ฒฐ๊ณผ์ด๋‹ค.

console.log(this.props)

history, location, match๊ฐ€ ๋‹ด๊ฒจ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.


Match

match ๊ฐ์ฒด์—๋Š” ์™€ URL์ด ๋งค์นญ๋œ ์ •๋ณด๊ฐ€ ๋‹ด๊ฒจ์ ธ์žˆ๋‹ค.
match.params๋กœ patch์— ์„ค์ •ํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

  • path : [string] ๋ผ์šฐํ„ฐ์— ์ •์˜๋œ path

  • url : [string] ์‹ค์ œ ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ์š”์ฒญ๋œ url path

  • isExact : [boolean] true์ผ ๊ฒฝ์šฐ ์ „์ฒด ๊ฒฝ๋กœ๊ฐ€ ์™„์ „ํžˆ ๋งค์นญ๋  ๊ฒฝ์šฐ์—๋งŒ ์š”์ฒญ์„ ์ˆ˜ํ–‰

  • params : [JSON object] url path๋กœ ์ „๋‹ฌ๋œ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ์ฒด



Location

Location ๊ฐ์ฒด์—๋Š” ํ˜„์žฌ ํŽ˜์ด์ง€์˜ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๋Œ€ํ‘œ์ ์œผ๋กœ location.search๋กœ ํ˜„์žฌ url์˜ ์ฟผ๋ฆฌ ์ŠคํŠธ๋ง์œผ๋ฅด ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

  • pathname : [string] ํ˜„์žฌ ํŽ˜์ด์ง€์˜ ๊ฒฝ๋กœ๋ช…

  • search : [string] ํ˜„์žฌ ํŽ˜์ด์ง€์˜ query string

  • hash : [string] ํ˜„์žฌ ํŽ˜์ด์ง€์˜ hash



History

History ๊ฐ์ฒด๋Š” ๋ธŒ๋ผ์šฐ์ € history์™€ ์œ ์‚ฌํ•˜๋‹ค. ์Šคํƒ(stack)์— ํ˜„์žฌ๊นŒ์ง€ ์ด๋™ํ•œ url ๊ฒฝ๋กœ๋“ค์ด ๋‹ด๊ฒจ์žˆ๋Š” ํ˜•ํƒœ๋กœ ์ฃผ์†Œ๋ฅผ ์ž„์˜๋กœ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ๋˜๋Œ์•„๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค.

  • length : [number] ์ „์ฒด history ์Šคํƒ์˜ ๊ธธ์ด

  • action : [string] ์ตœ๊ทผ์— ์ˆ˜ํ–‰๋œ action

  • location : [JSON object] ์ตœ๊ทผ ๊ฒฝ๋กœ ์ •๋ณด

  • push(path,[state]) : [fuction] ์ƒˆ๋กœ์šด ๊ฒฝ๋กœ๋ฅผ history ์Šคํƒ์œผ๋กœ ํ‘ธ์‹œํ•˜์—ฌ ํŽ˜์ด์ง€๋ฅผ ์ด๋™

    ๋ณดํ†ต ์ด๋™ํ•  ๋งํฌ๋ฅผ push()์•ˆ์— ๋„ฃ์–ด ์“ด๋‹ค.

    this.props.history.push(`์ด๋™ํ• ๋งํฌ`);

    ์•„๋ž˜๋Š” ํ† ํฐ์ด๋‚˜๊ฒฐ์ œ์ •๋ณด๋ฅผ ๋‹ค์Œ ํŽ˜์ด์ง€ ์ด๋™ํ• ๋•Œ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ๋„˜์–ด๊ฐˆ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.


    this.props.history.push((
        pathname: '์ด๋™ํ• ๋งํฌ',
        state: { detail : ์ „๋‹ฌํ•  ํŒŒ๋ผ๋ฏธํ„ฐ }
    })

    ์ „๋‹ฌ ๋ฐ›๋Š” ํŽ˜์ด์ง€์—์„œ๋Š” ์•„๋ž˜์ฒ˜๋Ÿผ ๋ถˆ๋Ÿฌ์˜จ๋‹ค

    const getparams = this.props.location.state.detail;

    ์ด๋ ‡๊ฒŒ ๋ถˆ๋Ÿฌ์˜ค๋ฉด getparams ์•ˆ์— ์ „๋‹ฌ๋ฐ›์€ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ๋‹ด์•„์ ธ ์žˆ๋‹ค.

  • replace(path,[state]) : [fuction] ์ตœ๊ทผ ๊ฒฝ๋กœ๋ฅผ history ์Šคํƒ์—์„œ ๊ต์ฒดํ•˜์—ฌ ํŽ˜์ด์ง€๋ฅผ ์ด๋™

  • go(n) : [function] history ์Šคํƒ์˜ ํฌ์ธํ„ฐ๋ฅผ n๋ฒˆ์งธ๋กœ ์ด๋™

  • goBack() : [function] ์ด์ „ ํŽ˜์ด์ง€๋กœ ์ด๋™

  • goForward() : [function] ์•ž ํŽ˜์ด์ง€๋กœ ์ด๋™

  • block(prompt) : [function] history ์Šคํƒ์˜ PUSH/POP ๋™์ž‘์„ ์ œ์–ด

profile
์ผ๊ณฑ ๋ฒˆ ๋„˜์–ด์ ธ๋„ ์—ฌ๋Ÿ ๋ฒˆ ์ผ์–ด๋‚˜๋ฉด์„œ ์„ฑ์žฅํ•˜๋Š” ํ”„๋ก ํŠธ ๊ฐœ๋ฐœ์ž์ž…๋‹ˆ๋‹ค

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