์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- ์ด๋ชฝ์ด์ค๊ณต๋ต
- ์ฝ๋ฉํ ์คํธ
- FE
- Git
- Front-End
- ์ฑ์ฅ๊ธฐ๋ก
- ์ฝ๋ฉ์บ ํ
- ๊ฒ์์ถ์ฒ
- ํฌ์ค๊ธฐ๋ก
- PT
- ํ๊ธฐ
- IT
- ์ง์ฝ
- GitHub
- ํ์
- ๋ค์ด์ดํธ
- ๊ฐ๋ฐ์
- react
- ์ผํ
- ํ๋ก๊ทธ๋๋จธ์ค
- TiL
- ํ ์ต๋ชฉํ
- ํฌ์ค
- ๋ชจ๋ฐ์ผ๊ฒ์
- ์ด๋ชฝ์ด์ค
- ๊นํ๋ธ
- ๋น์ ๊ณต์
- ๋ฐ๋ํ๋กํ
- ๊น
- ์ฝ๋ฉ
- Today
- Total
JOYLOG
ํ๋ผ๋ฏธํฐ(Parameter)์ ์ฟผ๋ฆฌ(Query) : ์ ๋์ ์ธ ๊ฐ ์ ๋ฌ์ ์ํ URL ์ ๋ต ๋ณธ๋ฌธ
ํ๋ผ๋ฏธํฐ(Parameter)์ ์ฟผ๋ฆฌ(Query) : ์ ๋์ ์ธ ๊ฐ ์ ๋ฌ์ ์ํ URL ์ ๋ต
์ฃผํ 2022. 1. 6. 17:19history.pushState(null, '', '/kpi/reply');
์ธํด ์ํ 2์ฃผ์ฐจ! ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋๋ฅผ ๋ถ์ํ๋ค ํ๋ผ๋ฏธํฐ๋ฅผ ๋ณ๊ฒฝํ๋ ์ด์ ์ ๋ํด ์ดํดํ๊ณ ์์ง ์๋ค๋ ๊ฒ์ ๊นจ๋ฌ์๋ค.
๊ทธ๋์ ํ๋ผ๋ฏธํฐ์ ์ฟผ๋ฆฌ์ ๋ํด ์ ๋ฆฌํด๋ณด๊ณ ์ ํ๋ค!
ํ์ด์ง ์ฃผ์๋ฅผ ์ ์ํ ๋, ์ ๋์ ์ธ ๊ฐ์ ์ ๋ฌํด์ผํ ๋๊ฐ ์กด์ฌํ๋ค.
์ด ๋ ํ๋ผ๋ฏธํฐ์ ์ฟผ๋ฆฌ๋ฅผ ํ์ฉํ๋ค.
Tip
1. URL์ ํตํด ๋ณด์ฌ์ฃผ๋ ๊ฐ์ ์ง์ ํ๊ธฐ ๋๋ฌธ์, ์๋ก๊ณ ์นจ์ ํด๋น ๋ฐ์ดํฐ ๊ฐ๋ค์ ์์ง ์๋๋ค
2. ์ ํจํ์ง ์์ Parameter์ ๋ํด์๋ Validation ๊ฒ์ฌ๋ฅผ ํด์ฃผ์ด์ผ ํ๋ค.
ํ๋ผ๋ฏธํฐ : /profiles/joy
→ ์ผ๋ฐ์ ์ผ๋ก ํ๋ผ๋ฏธํฐ๋ ํน์ id๋ ์ด๋ฆ์ ๊ฐ์ง๊ณ ์กฐํํ ๋ ์ฌ์ฉ
์ฟผ๋ฆฌ : /about?detail=true
→ ์ฟผ๋ฆฌ์ ๊ฒฝ์ฐ์ ์ด๋ค ํค์๋๋ฅผ ๊ฒ์ํ๊ฑฐ๋, ์์ฒญ์ ํ ๋ ํ์ํ ์ต์ ์ ์ ๋ฌํ ๋ ์ฌ์ฉ
URL Params
์๋ฅผ ๋ค์ด ํ๋กํ ํ์ด์ง๊ฐ ์์ ๋, ๋ท ๋ถ๋ถ์ username์ ๋ฃ์ด์ฃผ๋ฉฐ, ํด๋น ๊ฐ์ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์ ์ ์๋ค. /profile/joy
src/Profile.js
import React from "react";
const profileData = {
joy: {
name: "์ฐจ์กฐ์ด",
description: "์ค๋๋ ์ด์ฌํ ์ผ์ ํ๋ค.",
}
};
// ํ๋ผ๋ฏธํฐ๋ฅผ ๋ฐ์์ฌ ๋ match ์์ ๋ค์ด์๋ params ๊ฐ์ ์ฐธ์กฐํ๋ค.
// match ๊ฐ์ฒด ์์๋ ํ์ฌ์ ์ฃผ์๊ฐ Route ์ปดํฌ๋ํธ์์ ์ ํ ๊ท์น๊ณผ ์ด๋ป๊ฒ ์ผ์นํ๋์ง์ ๋ํ ์ ๋ณด๊ฐ ๋ค์ด์๋ค.
function Profile({ match }) {
const { username } = match.params;
const profile = profileData[username];
if (!profile) return <div>์กด์ฌํ์ง ์๋ ์ฌ์ฉ์์
๋๋ค.</div>;
return (
<div>
<h3>
{username} ({profile.name})
</h3>
<p>{profile.description}</p>
</div>
);
}
export default Profile;
path ๊ท์น์๋ /profiles/:username ์ผ๋ก ์์ฑํด์ค๋ค๋ฉด, username์ ํด๋นํ๋ ๊ฐ์ ํ๋ผ๋ฏธํฐ๋ก ๋ฃ์ด์ฃผ์ด์ Profile ์ปดํฌ๋ํธ์์ match props๋ฅผ ํตํด ์ ๋ฌ๋ฐ์ ์ ์๊ฒ ๋๋ค.
src/App.js
<Route path="/profile/:username" component={Profile} />
Query
localhost:3000/about?username=joy&name=์ฐจ์กฐ์ด
์ด๋ ๊ฒ ? ๋ค์ ์ ๋ณด๊ฐ ๋ด๊ฒจ์๋ ๋ฏํ ์ฃผ์๋ฅผ ๋ณธ ์ ์ด ์์ ๊ฒ์ด๋ค. ์ด ? ๋ท ๋ถ๋ถ์ ์ฟผ๋ฆฌ๋ผ๊ณ ํ๋ค.
์ฟผ๋ฆฌ๋ ๋ผ์ฐํธ ์ปดํฌ๋ํธ์๊ฒ props ์ ๋ฌ๋๋ loccation ๊ฐ์ฒด์ ์๋ search ๊ฐ์์ ์ฝ์ด์ฌ ์๊ฐ ์๋ค.
location ๊ฐ์ฒด๋ ํ์ฌ ์ฑ์ด ๊ฐ๊ณ ์๋ ์ฃผ์์ ๋ํ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
qs ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ ์์ ์ ๋์์ค๋ค.
About ์ปดํฌ๋ํธ์์ search ๊ฐ์ ์๋ detail ๊ฐ์ ๋ฐ์์, ํด๋น ๊ฐ์ด True ์ผ ๋ ์ถ๊ฐ์ ๋ณด๋ฅผ ๋ณด์ฌ์ฃผ๋๋ก ํ๋ ์์ ์ด๋ค.
import React from "react";
import qs from "qs";
function About({ location }) {
const query = qs.parse(location.search, {
ignoreQueryPrefix: true, // ๋ฌผ์ํ๋ฅผ ์ ๊ฑฐํ๊ณ ๋ฐ์์ค๊ธฐ ์ํด์
});
const detail = query.detail === "true";
return (
<div>
<h1>์๊ฐ</h1>
<p>๋ผ์ฐํฐ ๊ธฐ์ด ์์ </p>
{detail && <p>detail๊ฐ์ด true์
๋๋ค.</p>}
</div>
);
}
export default About;