Optional Chiaing, history/location/match

ym j·2021년 5월 25일
0

React

목록 보기
6/9
post-thumbnail

✔ 이번에는 1차 프로젝트를 진행하면서 새로 알게된 개념이나, 부족했던 개념 몇가지를 추려서 정리해보고자 한다.


Optional Chaining

조건부 렌더링 에러로 난관에 부딪히던 도중.. 갓유진님의 도움을 Optional Chaining을 알게 되었다. (모르는게 없으시네.... 👍👍👍👍👍 )

이 옵셔널 체이닝을 사용하게 되면 프로퍼티가 없는 객체에 에러없이 안전하게 접근할 수 있다.

let user = {}; // 주소 정보가 없는 사용자

alert(user.address.street); // Uncaught TypeError: Cannot read property 'street' of undefined

alert(user?.address.street); // 에러 x, undefined

?. 앞의 평가 대상이 undefined이거나 null이면 에러가 아닌 undefined를 반환한다.
원래는 논리 연산자인 &&를 통해 조건부 렌더링에 사용하였지만, 코드가 너무 길어진다는 단점이 생겨 옵셔널 체이닝 도입 후 이를 사용하게 되었다. 하지만 이러한 옵셔널 체이닝도 남용해서는 안된다고 한다. 그 이유는 에러를 반환하지 못하기 때문에 디버깅에 어려움이 많아져, 반드시 존재하지 않아도 괜찮은 대상에만 사용해야 한다는 점이 존재한다.



history, location, match

브라우저와 리액트에서 제공하는 router를 연결하게 되면, 라우터가 history api에 접근할 수 있게 되며 연결된 각각의 컴포넌트들은 history, location, match 객체를 props로 제공받는다. 단, 직접적으로 Route 컴포넌트에 경로가 지정이 되지 않은 컴포넌트는, withRouter를 통해 props로 3가지 객체를 받을 수 있다.
(이때 일반적으로 우리가 사용하는 Router는 동적인 페이지를 제작하므로 BrowserRouter가 보편적으로 사용된다.)

export default Routes class Routes extends React.Component {
  render() {
    return (
      <Router>
        <Navbar />
        <Switch>
          <Route exact path="/" component={Main}></Route>
          <Route exact path="/detail/:id" component={MovieDetail}></Route>
          <Route exact path="/review" component={ReviewPage}></Route>
          <Route exact path="/mypage" component={MyPage}></Route>;
          <Route exact path="/mytest" component={AnalyzeTest}></Route>;
        </Switch>
        <Footer />
      </Router>
    );
  }
}


1. history: Route로 경로를 지정해준 페이지들간의 이동을 위해 필요한 method를 담고 있다.

  • action : 최근에 수행된 action (PUSH, REPLACE or POP)

  • location : 최근 경로 정보

  • push(path, state) : 새로운 경로를 history 스택으로 푸시하여 페이지를 이동

  • replace(path, state) : 최근 경로를 history 스택에서 교체하여 페이지를 이동

  • goBack(): 이전 페이지로 이동

  • goForward(): 앞 페이지로 이동


2. location: 현재 페이지의 정보를 담고 있다.

  • pathname: 현재 page의 경로명

  • search: 현재 url의 쿼리 스트링

  • hash: 현재 page의 hash

3.match: Route path와 url이 매칭 관련 정보가 담겨있다. 대표적으로 path parameter에 사용되는 params가 존재한다.

  • path: 실제 라우터에 정의된 path

  • url: 클라이언트(웹)으로부터 요청된 url path

  • isExact true일 경우 경로가 완전히 매칭할 때만 요청을 수행

  • params: url path로 전달된 parameter 객체 (path parameter )



profile
블로그를 이전하였습니다 => "https://jymini.tistory.com"

0개의 댓글