다른 것들은 무조건 Link
를 사용해서 해당 component
를 렌더링 하지만, withRouter
를 사용하면, 굳이 Link
없이도 화면 렌더링이 가능해짐
WithRouterSample.js
같은 아무이름으로 파일을 만들고 난 후,
import {withRouter} from 'react-router-dom';
으로 import
그 다음에, 다음처럼 코드 작성
import React from 'react';
import { withRouter } from 'react-router-dom';
function WithRouterSample({ location, match, history }) {
return (
<div>
<h4>location</h4>
<textarea value={JSON.stringify(location, null, 2)} readOnly></textarea>
<h4>match</h4>
<textarea value={JSON.stringify(match, null, 2)} readOnly></textarea>
<button onClick={() => history.push('/')}>홈으로</button>
</div>
);
}
export default withRouter(WithRouterSample);
보다시피, 매개변수로 location
, match
, history
를 받는 걸 알 수 있음
다른 .js
파일에서 렌더링 부분에 WithRouterSample
을 넣게 되면
다음같은 화면이 들어가게 됨 이 말은 뭐냐, 다른 .js
파일로 부터 match
에 대한 정보, 그리고 location
에 대해 정보를 받았다는 걸 뜻함.
홈으로
버튼을 눌러도 홈으로 잘 이동함
JSON.stringify(match, null, 2)
이부분은 match안의 내용이 JSON인데, string화 시키겠다는 표현이고, 뒤에 null, 2는 들여쓰기에 필요한 내용
withRouter와 유사한 라이브러리가 있는데 이게 routerHook
라이브러리
yarn add use-react-router
로 yarn
을 통해 라이브러리 추가를 해줘야 하는 커스텀 훅임 정식 훅은 아닌 듯 함
import useReactRouter from 'use-react-router';
다 했으면 import
function RouterHookSample() {
const { history, location, match } = useReactRouter();
console.log(history, location, match);
return null;
}
export default RouterHookSample;
useReactRouter
를 통해 history, location, match
를 받아올 수 있음
사용은 기존의 withRouter
와 거의 동일한 것 같음
import React from 'react';
import useReactRouter from 'use-react-router';
function RouterHookSample() {
const { history, location, match } = useReactRouter();
return (
<div>
<h4>location</h4>
<textarea value={JSON.stringify(location, null, 2)} readOnly></textarea>
<h4>match</h4>
<textarea value={JSON.stringify(match, null, 2)} readOnly></textarea>
<button onClick={() => history.push('/')}>홈으로</button>
</div>
);
}
export default RouterHookSample;
이렇게 withRouter
에서 썼던 코드를 그대로 써도 아무문제 없이 잘 출력됨