// App.js
function App() {
return (
<BrowserRouter>
<Route path="/" exact component={Home} />
<Route path="/profile" exact component={Profile} />
{/* : 콜론을 붙여줌으로써 동적으로 Routing 할 수 있다. */}
<Route path="/profile/:id" component={Profile} />
<Route path="/About" component={About} />
</BrowserRouter>
);
}
// Profile.jsx
// props 로 외부에서 값을 받아온다. Route 컴포넌트에 해당하는 Profile 만 받아온다.
export default function Profile(props) {
const id = props.match.params.id;
console.log(id, typeof id); // type 은 string 이다.
return(
<div>
<h2>Profile 페이지 입니다.</h2>
{id && <p> id 는 {id} 입니다.</p>}
</div>)
}
optional 한 입력값인 query string 으로 Routing 해보자.
위의 방식처럼 Component 를 추가 할 필요없다.
<http://localhost:3000/About?name=malza>
위의 url 은 About 과 같다. 따라서 추가적으로 Route 처리 할 필요없다.
name 을 꺼내와 보자.
1. 브라우저에 내장되어있는 객체 URLSearchParams 를 사용할 수 있다.
// About.jsx
export default function About(props) {
const searchParams = props.location.search;
console.log(searchParams);
const obj = new URLSearchParams(searchParams);
console.log(obj.get('name')); // malza
return <div>About Page!</div>
}
URLSearchParams 의 단점은 method를 기억해야 하고, 지원하지 않는 브라우저도 있다.
둘의 단점을 극복하기 위해 query string 을 사용하겠다.
$ npm i query-string -S
// Abount.jsx
import queryString from 'query-string';
export default function About(props) {
const searchParams = props.location.search;
console.log(searchParams);
// const obj = new URLSearchParams(searchParams);
// console.log(obj.get('name'));
const query = queryString.parse(searchParams);
console.log(query);
return (
<div>
<h2>About Page!</h2>
{query.name && <p>name은 {query.name} 입니다.</p>}
</div>)
}