Skip to content

Latest commit

ย 

History

History
121 lines (95 loc) ยท 4.48 KB

File metadata and controls

121 lines (95 loc) ยท 4.48 KB

react-node-js-set-routes

๋ฆฌ์•กํŠธ ๋…ธ๋“œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ผ์šฐํŒ… ์„ค์ •ํ•˜๊ธฐ


desc

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋…ธ๋“œ ๋ฆฌ์•กํŠธ์—์„œ ๋ผ์šฐํŒ… ์„ค์ •์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

inst

์˜ˆ์‹œ :

App.js ์—์„œ ๋ผ์šฐํ„ฐ๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค์ •ํ•œ๋‹ค :

๐Ÿ“‚ App.js

<Route path="/about/:name/:what" component={About}/>
<Route path="/about" component={About}/>

About.js์˜ ์ฝ”๋“œ๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์„ ๋•Œ

๐Ÿ“‚ About.js

import React from 'react';
import queryString from 'query-string';

const About = ({location, match}) => {
  const query = queryString.parse(location.search);

  const detail = query.detail === 'true';

  return (
    <div>
    <h2>About {match.params.name}</h2>
    <p>second : {match.params.what}</p>
    {detail && 'detail : blahblah'}
    </div>
  );
};

export default About;

์˜ˆ๋ฅผ ๋“ค์–ด ์ฃผ์†Œ์ฐฝ์— App/foo/barr?detail=true๋ฅผ ์ ์œผ๋ฉด About ์ปดํฌ๋„ŒํŠธ๋Š” {location, match}์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ •๋ณด๋ฅผ ๋ฐ›๊ฒŒ ๋œ๋‹ค. match.params.name์€ foo match.params.what์€ barr location.search = <์ฟผ๋ฆฌ ๋ฌธ์ž์—ด, detail๊ฐ’=true>

๊ทธ๋Ÿฐ๋ฐ ๋งŒ์•ฝ App/foo ๊นŒ์ง€๋งŒ ํ•  ๊ฒฝ์šฐ :what params๋งŒ ์•ˆ ๋ฐ›๊ณ  /about/:name/:what ๋ผ์šฐํŠธ๋กœ ๋ฐ›๋Š” ๋ฐฉ์‹์ด ์•„๋‹ˆ๋ผ, ์•„์˜ˆ ๋งค์น˜๊ฐ€ ์•ˆ๋˜์–ด์„œ ๋‹ค์Œ ๋ผ์šฐํŠธ์ธ /about ์œผ๋กœ ๋งค์น˜๊ฐ€ ๋˜๊ณ , About ์ปดํฌ๋„ŒํŠธ๋Š” match.params์— ์•„๋ฌด๊ฒƒ๋„ ์—†๋‹ค.

About asddsd

second : ddddddddd
detail : blahblah

์ด ์•„๋ž˜ ๋ถ€๋ถ„์˜ ์ถœ์ฒ˜ : velopert blog

๋ผ์šฐํŠธ ํŒŒ๋ผ๋ฏธํ„ฐ ์ฝ๊ธฐ

๋ผ์šฐํŠธ์˜ ๊ฒฝ๋กœ์— ํŠน์ • ๊ฐ’์„ ๋„ฃ๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ฐฉ๋ฒ•์€ ๋‘๊ฐ€์ง€๊ฐ€ ์žˆ๋Š”๋ฐ์š”, params ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ๊ณผ, query ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ์ž…๋‹ˆ๋‹ค.

๋ผ์šฐํŠธ๋กœ ์„ค์ •ํ•œ ์ปดํฌ๋„ŒํŠธ๋Š”, 3๊ฐ€์ง€์˜ props ๋ฅผ ์ „๋‹ฌ๋ฐ›๊ฒŒ ๋ฉ๋‹ˆ๋‹ค:

history ์ด ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด push, replace ๋ฅผ ํ†ตํ•ด ๋‹ค๋ฅธ ๊ฒฝ๋กœ๋กœ ์ด๋™ํ•˜๊ฑฐ๋‚˜ ์•ž ๋’ค ํŽ˜์ด์ง€๋กœ ์ „ํ™˜ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. location ์ด ๊ฐ์ฒด๋Š” ํ˜„์žฌ ๊ฒฝ๋กœ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ง€๋‹ˆ๊ณ  ์žˆ๊ณ  URL ์ฟผ๋ฆฌ (/about?foo=bar ํ˜•์‹) ์ •๋ณด๋„ ๊ฐ€์ง€๊ณ ์žˆ์Šต๋‹ˆ๋‹ค. match ์ด ๊ฐ์ฒด์—๋Š” ์–ด๋–ค ๋ผ์šฐํŠธ์— ๋งค์นญ์ด ๋˜์—ˆ๋Š”์ง€์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ์žˆ๊ณ  params (/about/:name ํ˜•์‹) ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ ์žˆ์Šต๋‹ˆ๋‹ค.

(Route์— component๋ฅผ ์ง€์ •ํ•˜๋Š” ๊ทธ ๊ฒฝ๋กœ ์ดํ›„๋ถ€ํ„ฐ๋Š” ์ „๋ถ€ ๊ทธ ์ปดํฌ๋„ŒํŠธ๊ฐ€ match๋กœ์„œ ๋ฐ›๋Š”๋‹ค๋Š” ๋œป์œผ๋กœ ๋ณด์ธ๋‹ค. ๊ทผ๋ฐ About์— ๋ผ์šฐํ„ฐ ์„ค์ •ํ•˜๊ณ  About/asd/asd2/asd3 ์œผ๋กœ ์ ‘์†ํ•˜๋ฉด match.params.name์€ asd๋ผ๊ณ ๋งŒ ๋‚˜์˜จ๋‹ค.)

URL ์ฟผ๋ฆฌ

๋ฆฌ์•กํŠธ ๋ผ์šฐํ„ฐ v3 ์—์„œ๋Š” URL ์ฟผ๋ฆฌ๋ฅผ ํ•ด์„ํ•ด์„œ ๊ฐ์ฒด๋กœ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๊ธฐ๋Šฅ์ด ์ž์ฒด์ ์œผ๋กœ ์žˆ์—ˆ๋Š”๋ฐ์š”, ์ฟผ๋ฆฌ๋ฅผ ํŒŒ์‹ฑํ•˜๋Š” ๋ฐฉ์‹์€ ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ์žˆ์–ด์„œ, ๊ฐœ๋ฐœ์ž๋“ค์ด ์—ฌ๋Ÿฌ๊ฐ€์ง€๋ฅผ ๋ฐฉ์‹์„ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ด ๊ธฐ๋Šฅ์„ ๋”์ด์ƒ ๋‚ด์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ URL ์ฟผ๋ฆฌ๋ฅผ ํ•ด์„ํ•˜๋Š”๊ฒƒ์€ ์šฐ๋ฆฌ์˜ ๋ชซ์ž…๋‹ˆ๋‹ค.

์ฟผ๋ฆฌ๋ฅผ ํ•ด์„ํ•˜๊ธฐ ์œ„ํ•ด์„ , ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ค์น˜ํ•ด์ฃผ์„ธ์š”. ์ž์ฒด์ ์œผ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๊ฒ ์ง€๋งŒ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฒƒ์ด ํ›จ์”ฌ ๊ฐ„ํŽธํ•ฉ๋‹ˆ๋‹ค.

$ yarn add query-string

1-3. ๋ผ์šฐํŠธ ์ด๋™ํ•˜๊ธฐ

Link ์ปดํฌ๋„ŒํŠธ

์•ฑ ๋‚ด์—์„œ ๋‹ค๋ฅธ ๋ผ์šฐํŠธ๋กœ ์ด๋™ ํ•  ๋•Œ์—๋Š”, ์ผ๋ฐ˜ <a href...>foo</a> ํ˜•์‹์œผ๋กœ ํ•˜๋ฉด ์•ˆ๋ฉ๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด, ์ด๋ ‡๊ฒŒํ•˜๋ฉด ์ƒˆ๋กœ๊ณ ์นจ์„ ํ•ด๋ฒ„๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์ด์ง€์š”.

์ƒˆ๋กœ๊ณ ์นจ์„ ํ•˜๊ธฐ ์œ„ํ•ด์„ , ๋ฆฌ์•กํŠธ ๋ผ์šฐํ„ฐ์— ์žˆ๋Š” Link ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ด ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํŽ˜์ด์ง€๋ฅผ ์ƒˆ๋กœ ๋ถˆ๋Ÿฌ์˜ค๋Š”๊ฑธ ๋ง‰๊ณ , ์›ํ•˜๋Š” ๋ผ์šฐํŠธ๋กœ ํ™”๋ฉด ์ „ํ™˜์„ ํ•ด์ค๋‹ˆ๋‹ค.

NavLink ์ปดํฌ๋„ŒํŠธ

NavLink ์ปดํฌ๋„ŒํŠธ๋Š” Link ๋ž‘ ๋น„์Šทํ•œ๋ฐ์š”, ๋งŒ์•ฝ์— ์„ค์ •ํ•œ URL ์ด ํ™œ์„ฑํ™”๊ฐ€ ๋˜๋ฉด, ํŠน์ • ์Šคํƒ€์ผ ํ˜น์€ ํด๋ž˜์Šค๋ฅผ ์ง€์ • ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Route ๋ฅผ ์ง€์ • ํ•  ๋•Œ ์ฒ˜๋Ÿผ, ์ค‘์ฒฉ๋ ์ˆ˜๋„ ์žˆ๋Š” ๋ผ์šฐํŠธ๋“ค์€ exact ๋กœ ์„ค์ •์„ ํ•˜์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ์— ํ™œ์„ฑํ™” ๋˜์—ˆ์„ ๋•Œ ํŠน์ • ํด๋ž˜์Šค๋ฅผ ์„ค์ •ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด activeClassName ์„ ์„ค์ •ํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

dep

  • node, react, js

ref

tags

#node, #react, #js, #javascript, #ecmascript, #route, #web