리액트에서도 브라우저 주소창대로 다른 페이지를 보여줄 수 있고, 이걸 라우팅이라고 부른다. 이미 만들어진 라우팅 라이브러리가 있기 때문에 패키지를 설치해서 사용.
yarn add react-router-dom
공식문서
index.js
에서BrowserRouter
를 임포트하고 적용한다import { BrowserRouter } from "react-router-dom"; - - <BrowserRouter> <App /> </BrowserRouter>
props
가 없을 때<Route path="주소[ex) /cat]" component={보여줄 컴포넌트} />
props
가 있을 때 <Route path="/cat" render={(props) => (<BucketList list={this.state.list})} />
이 때!! 기본 값이
path="/"
이고, 사용되는 다른 경로가path="/cat"
일 때,cat
컴포넌트에서는 기본 컴포넌트가 같이 나오게 된다.<Route path="/" exact component={Home} /> <Route path="/cat" component={Cat} />
이렇게
exact
를 사용하면 중복처리를 할 수 있어 해당 문제를 해결할 수 있다.
파라미터를 줄려면!
<Route path="/cat/:cat_name" component={Cat} />
그리고 해당 컴포넌트에서 파라미터를 받아 사용하기 위해서는 해당 파라미
터가 어디에 저장되어 들어오는지 알아야 한다.// in `localhost:3000/cat/nabi` // console.log(props.match)
Cat
컴포넌트에서props.match
를 콘솔로 찍어보면params
안에{cat_name: "nabi"}
로 저장된 파라미터를 찾을 수 있다.
![]()
// 'nabi' 를 사용하려면 props.match.params.cat_name
<Link/>
컴포넌트를 사용해서도 페이지 전환을 할 수 있다.
사용법은<Link to="주소">[텍스트]</Link>
또 조금 더 함수를 사용한 페이지 전환법으로는
history
객체를 사용하는 방법이 있다. 일단history
객체를 사용하기 위해서는withRouter
를 가져와야한다.import { withRouter } from "react-router"; - // 그리고 componentDidMount(){ console.log(this.props); } // history 의 객체들을 확인할 수 있다
그 중에
push
와goBack
을 통해button
에 페이지를 이동하거나 뒤로 돌아가는 것을 구현할 수 있다.onClick={() => {this.props.history.push('/cat/nabi')}} - onClick={() => {this.props.history.goBack();}}
사용자 경험을 위해 없는 파라미터로 진입했을 때 페이지가 없다는 알림이나 워딩을 보여줄 필요가 있다. 즉, 없는 주소처리.
<Switch> <Route path="/" exact component={BucketList} /> <Route path="/detail" component={Detail} /> <Route component={NotFound} /> </Switch>
<Switch>
를 활용하게 되면 경로가 지정되지 않은 페이지는 모두NotFound
로 들어가게 된다.
전반적으로 이해도 잘되고 직관적인 부분이 많아 공부하기는 편했다. 하지만 컴포넌트끼리 연결하는 과정에서 데이터나 정보를 주고받는 과정이 개념은 알겠는데 활용은 잘 못하겠는 그런 상태로 공부를 했다.
다른 부분을 공부하면서도 겪어왔던 고질적인 문제인 것 같다. 자바스크립트가 아직은 생소해서 그런건지 아니면 트리 구조인 리액트 특성상 원래 처음엔 직관적으로 받아들이기가 쉽지 않은 것인지 궁금하다.
지금도 이렇게 헷갈리는데 갈수록 걱정이 는다...