๋ฆฌ์กํธ ๋ ธ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ฐํ ์ค์ ํ๊ธฐ
- ์๋ฐ์คํฌ๋ฆฝํธ ๋ ธ๋ ๋ฆฌ์กํธ์์ ๋ผ์ฐํ ์ค์ ์ ํ ์ ์๋ค.
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๋ผ๊ณ ๋ง ๋์จ๋ค.)
๋ฆฌ์กํธ ๋ผ์ฐํฐ v3 ์์๋ URL ์ฟผ๋ฆฌ๋ฅผ ํด์ํด์ ๊ฐ์ฒด๋ก ๋ง๋ค์ด์ฃผ๋ ๊ธฐ๋ฅ์ด ์์ฒด์ ์ผ๋ก ์์๋๋ฐ์, ์ฟผ๋ฆฌ๋ฅผ ํ์ฑํ๋ ๋ฐฉ์์ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์์ด์, ๊ฐ๋ฐ์๋ค์ด ์ฌ๋ฌ๊ฐ์ง๋ฅผ ๋ฐฉ์์ ์ฌ์ฉ ํ ์ ์๋๋ก ์ด ๊ธฐ๋ฅ์ ๋์ด์ ๋ด์ฅํ์ง ์์ต๋๋ค. ๋ฐ๋ผ์ URL ์ฟผ๋ฆฌ๋ฅผ ํด์ํ๋๊ฒ์ ์ฐ๋ฆฌ์ ๋ชซ์ ๋๋ค.
์ฟผ๋ฆฌ๋ฅผ ํด์ํ๊ธฐ ์ํด์ , ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํด์ฃผ์ธ์. ์์ฒด์ ์ผ๋ก ๊ตฌํํ๋ ๋ฐฉ๋ฒ๋ ์๊ฒ ์ง๋ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋๊ฒ์ด ํจ์ฌ ๊ฐํธํฉ๋๋ค.
$ yarn add query-stringLink ์ปดํฌ๋ํธ
์ฑ ๋ด์์ ๋ค๋ฅธ ๋ผ์ฐํธ๋ก ์ด๋ ํ ๋์๋, ์ผ๋ฐ
<a href...>foo</a>ํ์์ผ๋ก ํ๋ฉด ์๋ฉ๋๋ค. ์๋ํ๋ฉด, ์ด๋ ๊ฒํ๋ฉด ์๋ก๊ณ ์นจ์ ํด๋ฒ๋ฆฌ๊ธฐ ๋๋ฌธ์ด์ง์.์๋ก๊ณ ์นจ์ ํ๊ธฐ ์ํด์ , ๋ฆฌ์กํธ ๋ผ์ฐํฐ์ ์๋ Link ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํด์ผํฉ๋๋ค. ์ด ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ฉด ํ์ด์ง๋ฅผ ์๋ก ๋ถ๋ฌ์ค๋๊ฑธ ๋ง๊ณ , ์ํ๋ ๋ผ์ฐํธ๋ก ํ๋ฉด ์ ํ์ ํด์ค๋๋ค.
NavLink ์ปดํฌ๋ํธ๋ Link ๋ ๋น์ทํ๋ฐ์, ๋ง์ฝ์ ์ค์ ํ URL ์ด ํ์ฑํ๊ฐ ๋๋ฉด, ํน์ ์คํ์ผ ํน์ ํด๋์ค๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค. Route ๋ฅผ ์ง์ ํ ๋ ์ฒ๋ผ, ์ค์ฒฉ๋ ์๋ ์๋ ๋ผ์ฐํธ๋ค์ exact ๋ก ์ค์ ์ ํ์ ์ผ ํฉ๋๋ค. ๋ง์ฝ์ ํ์ฑํ ๋์์ ๋ ํน์ ํด๋์ค๋ฅผ ์ค์ ํ๊ณ ์ถ๋ค๋ฉด activeClassName ์ ์ค์ ํ์๋ฉด ๋ฉ๋๋ค.
- node, react, js
#node, #react, #js, #javascript, #ecmascript, #route, #web