const reverse = x => {
const list = x.toString().split("")
if(list[0] === "-"){
const minus = list.shift();
return Number(minus+list.reverse().join(""))
}
return Number(list.reverse().join(""))
}
const App = () => {
return (
<div>
<Switch> // switch 사용시 규칙이 일치하는 라우트 단 한개만 렌더
// 아무것도 일치 하지 않으면 Not Found error
<Route path="/" exact component={Home} />
<Route path="/about" component={About} />
</Switch>
</div>
);
};
const App = () => {
return (
<div>
<ul>
<li>
<Link to="/">홈</Link>
</li>
<li>
<Link to="/about">소개</Link>
</li>
</ul>
<hr />
</div>
);
};
<NavLink
to="/profiles/velopert"
activeStyle={{ background: 'black', color: 'white' }}
>
</NavLink>
/profiles/velopert // 파라미터
/about?details=true // 쿼리
- match를 이용한 방법
<Route path="/" exact={true} component={Home} />
<Route path="/about" component={About} />
<Route path="/profiles/:username" component={Profile} />
//:username이라는 값을 파라미터로 인식하여 값으로써 전달 가능
const Profile = ({ match }) => {
// 파라미터를 받아올 땐 match 안에 들어있는 params 값을 참조
const { username } = match.params;
return (
<div>
{username} // url 뒤에 지정해 놓은 변수 값 받아와 사용
</div>
);
};
location 및 match가 가지고 있는 정보
- location 이용해서 search 값 가져오기
{
key: 'ac3df4',
pathname: '/somewhere'
search: '?some=search-string',
hash: '#howdy',
state: {
[userDefined]: true
}
}
const About = ({ location }) => {
const query = qs.parse(location.search, {
ignoreQueryPrefix: true
});
const detail = query.detail === 'true';
// 쿼리의 파싱결과값은 문자열
qs말고 json.parse, json.stringify 사용 가능
- histroy 이용해서 뒤로가기,특정경로 이동, 이탈 방지
function HistorySample({ history }) {
const goBack = () => {
history.goBack();
};
// 페이지 뒤로가기
const goHome = () => {
history.push('/');
};
// 페이지 "/"로 이동
useEffect(() => {
console.log(history);
const unblock = history.block('정말 떠나실건가요?');
return () => {
unblock();
};
}, [history]);
// 이탈하려는 순간 위의 메소드 실행
// app.js
const App = () => {
return (
<div>
<ul>
<li>
<Link to="/">홈</Link>
</li>
<li>
<Link to="/about">소개</Link>
</li>
<li>
<Link to="/profiles">프로필 목록</Link>
</li>
</ul>
<hr />
<Route path="/" exact={true} component={Home} />
<Route path="/about" component={About} />
<Route path="/profiles" component={Profiles} />
</div>
)
// profiles.js
<div>
<h3>유저 목록:</h3>
<ul>
<li>
<Link to="/profiles/velopert">velopert</Link>
</li>
<li>
<Link to="/profiles/gildong">gildong</Link>
</li>
</ul>
<Route
path="/profiles"
exact
render={() => <div>유저를 선택해주세요.</div>}
/>
<Route path="/profiles/:username" component={Profile} />
</div>
import React from 'react';
import { withRouter } from 'react-router-dom';
const WithRouterSample = ({ location, match, history }) => {
return (
<div>
<h4>location</h4>
<textarea value={JSON.stringify(location, null, 2)} readOnly />
<h4>match</h4>
<textarea value={JSON.stringify(match, null, 2)} readOnly />
<button onClick={() => history.push('/')}>홈으로</button>
</div>
);
};
export default withRouter(WithRouterSample);