[JS] ์๋ฐ์คํฌ๋ฆฝํธ URL ๊ฐ์ฒด / searchParams
URL ๊ฐ์ฒด
ํ์ฌ ํ์ด์ง์ URL์ด ์๋์ ๊ฐ๋ค๊ณ ๊ฐ์ ํ์ ๋... ์ฐธ๊ณ ๋ก %20
์ ๋น์นธ(space) 1๊ฐ
https://example.com/?name=Jonathan%20Smith&age=18
url
๊ฐ์ฒด์ search
์์ฑ์ ์ด์ฉํด ๋ชจ๋ ์ฟผ๋ฆฌ ์คํธ๋ง ๋ด์ฉ์ ๊ฐ์ ธ์ฌ ์ ์๋ค
const url = new URL(window.location.href); // ํ์ฌ url
url.search; // '?name=Jonathan%20Smith&age=18'
name
age
๊ฐ์ ํน์ ์ฟผ๋ฆฌ ์คํธ๋ง๋ง ๊ฐ์ ธ์ค๊ณ ์ถ๋ค๋ฉด URLSearchParams
๋ฉ์๋๋ฅผ ์ด์ฉํ๋ฉด ๋๋ค. get
์ผ๋ก ๊ฐ์ ์กฐํํ๊ณ append
(๊ธฐ์กด ๊ฐ์ ์ด์ด๋ถ์ด๊ธฐ) ํน์ set
(๊ธฐ์กด๊ฐ ๊ต์ฒด)์ผ๋ก ์๋ก์ด ๊ฐ์ ์ถ๊ฐํ ์๋ ์๋ค.
url.searchParams.get('name'); // 'Jonathan Smith'
url.searchParams.get('age'); // 18
url.searchParams.append('city', 'Seoul'); // 'city' ํค ๊ฐ์ 'Seoul' ์ถ๊ฐ
url.searchParams.get('city'); // 'Seoul'
url.searchParams.set('name', 'Johan'); // 'name' ํค ๊ฐ์ 'Jahan'์ผ๋ก ๋์ฒด
url.searchParams.get('name'); // 'Johan'
๋ง์ฝ ํน์ ์ฟผ๋ฆฌ์(ํค) ๊ฐ์ด ์ฌ๋ฌ๊ฐ๋ผ๋ฉด getAll
์ ์ด์ฉํด์ ๋ชจ๋ ์กฐํํ ์ ์๋ค. get
์ ์ฒซ๋ฒ์งธ ๊ฐ๋ง ๊ฐ์ ธ์จ๋ค
url.searchParams.set('name', 'Smith');
url.searchParams.append('name', 'Johan');
url.search; // '?name=Smith&age=18&name=Johan'
url.searchParams.get('name'); // 'Smith'
url.searchParams.getAll('name'); // ['Smith', 'Johan']
toString
๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฌธ์์ด ํํ๋ก ๊ฐ์ ธ์ฌ ์ ์๋ค
const url = new URL('https://example.com/?name=Jonathan%20Smith&age=18');
url.toString(); // 'https://example.com/?name=Jonathan%20Smith&age=18'
searchParams ๊ฐ์ฒด
searchParams ๊ฐ์ฒด๋ง ๋ฐ๋ก ๋ง๋ค์ด์ ๋จ๋ ์ผ๋ก ์กฐ์ํ ์๋ ์๋ค. ์ฟผ๋ฆฌ ์คํธ๋ง(url.search)์ ์ ์ธํ ๋ค๋ฅธ ์ฃผ์๊ฐ ํ์์์ ๋ ์ฌ์ฉํ๋ฉด ์ ์ฉํ๋ค. ์ฌ์ฉ ๋ฐฉ๋ฒ์ URL ๊ฐ์ฒด์ ๋น์ทํ๋ค.
const searchParams = new URLSearchParams('hello=world');
searchParams.get('hello'); // 'world'
searchParams.append('name', 'Johan'); // 'Johan'
searchParams.toString(); // 'hello=world&name=Johan'
์ฒดํฌ๋ฐ์ค๋ ๋ผ๋์ค ๊ฐ์ form ์์์ ์ ์กํ ๋ application/x-www-form-urlencoded
์ฝํ
์ธ ํ์
์ผ๋ก ๋ณด๋ด์ผํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. form ์์์ <form>
ํ๊ทธ๋ก ๊ฐ์ธ๊ณ <input type="submit" />
(ํน์ submit ํ์
์ button ํ๊ทธ) ์ ์ถ ๋ฒํผ์ ๋๋ฅด๋ฉด ์๋ฒ๋ก ์ ์ก๋๋ ๋ฐฉ์์ด๋ค(์ฐธ๊ณ ๋งํฌ).
๐ก button ํ์ ์ ๊ธฐ๋ณธ๊ฐ์ submit์ด๋ค(form ๋ฐ์ดํฐ๋ฅผ ์ ์ถํ๋ ๋ฒํผ์์ ๋ช ์).
<form onSubmit={(e) => e.preventDefault()}>
<div>
<span>์ด๋ฉ์ผ</span>
<input type="email" onChange={this.handleInputValue('email')} />
</div>
<button className="btn btn-login" type="submit" onClick={this.handleLogin}>
๋ก๊ทธ์ธ
</button>
</form>;
๋ง์ฝ form
์์(input ํ๊ทธ)์ ๋ณ๋ ์ํ๋ก ๊ด๋ฆฌํ๊ณ , ์ ์ถ ๋ฒํผ์ด ์๋ ์ปดํฌ๋ํธ์ <input>
ํ๊ทธ๋ฅผ ๋ ๋ํ๋ ์ปดํฌ๋ํธ๋ ๋ค๋ฅด๋ค๋ฉด searchParams
๊ฐ์ฒด๋ฅผ ํ์ฉํ ์ ์๋ค.
์๋ ์ฝ๋์์ payload
๋ POST ์์ฒญ ์ body๋ก ๋ณด๋ผ ๋ฐ์ดํฐ๋ค. ์ด ๋ฐ์ดํฐ๋ฅผ JSON์ผ๋ก ๋ณํํ ํ ์ํ๋ key์ ๊ฐ์ผ๋ก ๋ด์์ ๋ณด๋ด๋ฉด ๋๋ค. ์๋ ์ฝ๋์์ 'input'
์ด๋ผ๋ key์ ๋ด์๋ค.
export default {
get: () => {}, // ์๋ต
post: (payload) => {
const params = new URLSearchParams();
params.append('input', JSON.stringify(payload));
return axios.post(`${baseUrl}/submit`, params, {
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
});
},
};
๋ฐฐ์ด / ๊ฐ์ฒด๋ฅผ JSON์ผ๋ก ๋ณํํ ํ ์ฟผ๋ฆฌ ์คํธ๋ง์ผ๋ก ํ ๋นํ๋ฉด ์๋์ฒ๋ผ URL ์ธ์ฝ๋ฉ(ASCII Encoding) ๋๋ค.
const url = new URL('https://example.com/');
const payload = [{ name: 'Johan', age: 30 }];
url.searchParams.append('input', JSON.stringify(payload));
url.search; // '?input=%5B%7B%22name%22%3A%22Johan%22%2C%22age%22%3A30%7D%5D'
๋ ๋ง์ URL ์ธ์ฝ๋ฉ ๋ ํผ๋ฐ์ค ๋ฆฌ์คํธ๋ W3C ์ฐธ๊ณ .
[
:%5B
]
:%5D
{
:%7B
}
:%7D
"
:%22
๐ก searchParams ๊ฐ์ฒด๋ forEach
๋ฉ์๋๋ฅผ ์์ฒด์ ์ผ๋ก ์ง์ํ๊ณ (value ์ํ) for of
๋ฐ๋ณต๋ฌธ๋ ์ฌ์ฉํ ์ ์๋ค(key/value ์ ์ํ). ์ ๋์ฝ๋ ํฌ์ธํธ ์์ผ๋ก key๋ฅผ ์ ๋ ฌํ๋ sort()
๋ฉ์๋๋ ์๋ค.
const searchParams = new URLSearchParams();
searchParams.append('name', 'smith');
searchParams.append('name', 'johan');
searchParams.append('age', '30');
// ๋ชจ๋ value ์ํ
searchParams.forEach((el) => console.log(el)); // 'smith' 'johan' '30'
// ๋ชจ๋ key/value ์ ์ํ. searchParams.entries()๋ฅผ ์ํํ๋ ๊ฒ๊ณผ ๋์ผํ๋ค
for (p of searchParams) {
console.log(p); // ['name', 'smith'] ['name', 'johan'] ['age', '30']
}
// ๋ชจ๋ key ์ํ
for (key of searchParams.keys()) {
console.log(key); // 'name' 'age'
}
// ๋ชจ๋ value ์ํ
for (key of searchParams.values()) {
console.log(key); // 'smith' 'johan' '30'
}
const searchParams = new URLSearchParams('c=4&a=2&b=3&a=1');
searchParams.sort(); // ์ ๋์ฝ๋ ํฌ์ธํธ ๊ฐ์ ๋ฐ๋ผ key ์ ๋ ฌ
console.log(searchParams.toString()); // "a=2&a=1&b=3&c=4"
๋ ํผ๋ฐ์ค
๊ธ ์์ ์ฌํญ์ ๋ ธ์ ํ์ด์ง์ ๊ฐ์ฅ ๋น ๋ฅด๊ฒ ๋ฐ์๋ฉ๋๋ค. ๋งํฌ๋ฅผ ์ฐธ๊ณ ํด ์ฃผ์ธ์
'๐ช Programming' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[CS] ์ง๋ฒ ๊ณ์ฐ ๋ฐฉ๋ฒ โ 10์ง์ โ 2์ง์ ๋ณํ (0) | 2024.04.28 |
---|---|
[React] ๋ฆฌ์กํธ ๋ง์ฐ์ค ๋๋๊ทธ ๊ฐ๋ฅํ ์์ ๋ง๋ค๊ธฐ / ๊ธฐํ ํ๋กํผํฐ (0) | 2024.04.27 |
[JS] ์๋ฐ์คํฌ๋ฆฝํธ Map / Set ์๋ฃ๊ตฌ์กฐ (0) | 2024.04.27 |
[Web] ์ธ์ vs ์ฟ ํค vs ํ ํฐ (0) | 2024.04.27 |
[JS] ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ๋ฅผ ํ๋ณํ๋ 6๊ฐ์ง ๋ฐฉ๋ฒ (0) | 2024.04.27 |
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
[CS] ์ง๋ฒ ๊ณ์ฐ ๋ฐฉ๋ฒ — 10์ง์ โ 2์ง์ ๋ณํ
[CS] ์ง๋ฒ ๊ณ์ฐ ๋ฐฉ๋ฒ — 10์ง์ โ 2์ง์ ๋ณํ
2024.04.28 -
[React] ๋ฆฌ์กํธ ๋ง์ฐ์ค ๋๋๊ทธ ๊ฐ๋ฅํ ์์ ๋ง๋ค๊ธฐ / ๊ธฐํ ํ๋กํผํฐ
[React] ๋ฆฌ์กํธ ๋ง์ฐ์ค ๋๋๊ทธ ๊ฐ๋ฅํ ์์ ๋ง๋ค๊ธฐ / ๊ธฐํ ํ๋กํผํฐ
2024.04.27 -
[JS] ์๋ฐ์คํฌ๋ฆฝํธ Map / Set ์๋ฃ๊ตฌ์กฐ
[JS] ์๋ฐ์คํฌ๋ฆฝํธ Map / Set ์๋ฃ๊ตฌ์กฐ
2024.04.27 -
[Web] ์ธ์ vs ์ฟ ํค vs ํ ํฐ
[Web] ์ธ์ vs ์ฟ ํค vs ํ ํฐ
2024.04.27