Meet React Router 5.1

:: useParams

1. 기존의 방식

  1. match props를 이용하여 params에 해당하는 정보를 받아온다.
  2. 받아온 params를 Route component의 component props나 render props의 매개변수로 이를 넘겨준다.
import React from 'react'
import ReactDOM from 'react-dom'
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom'

// In the code below, BlogPost is used as both a <Route component>
// and in a <Route render> function. In both cases, it receives a `match`
// prop, which it uses to get the URL params.
function BlogPost({ match }) {
  let { slug } = match.params
  // ...
}

ReactDOM.render(
  <Router>
    <div>
      <Switch>
        {/* Using the `component` prop */}
        <Route path="/blog/:slug" component={BlogPost} />

        {/* Using the `render` prop */}
        <Route
          path="/posts/:slug"
          render={({ match }) => <BlogPost match={match} />}
        />
      </Switch>
    </div>
  </Router>,
  document.getElementById('root')
)

2. 기존 방식의 문제점

1. component props를 이용한 경우

2. render props를 이용한 경우

3. 두 방식 모두

3. useParams 사용하기

useParams를 통한 개선점

  1. params를 얻기 위해서 기존에 살펴봤던 방식처럼 component composition tricks들을 사용하지 않아도 된다.

    → 단지 children element를 사용하면 됩니다.