// Login.jsx
// props 의 history 로 웹url을 변경할 수 있다.
export default function Login(props) {
  console.log(props);
  function login() {
    setTimeout(() => {
      props.history.push('/');
    }, 1000);
  }
  return (
    <div>
      <h2>Login 페이지 입니다.</h2>
      <button onClick={login}>로그인하기</button>
    </div>
  )
}
로그인 기능은 프로젝트가 엄청나게 커짐에 따라서 아래로 들어가고 들어가고 하다보면,
위와같이 간단하게 할 수 없을 수 있다. 물론 위에서 props 를 계속 내려줄 수는 있을
것이다.

최상단에 로그인 버튼
// LoginButton.jsx
export default function LoginButton(props) {
  console.log(props);
  function login() {
    setTimeout(() => {
      props.history.push('/');
    }, 1000);
  }
  return <button onClick={login}>로그인하기</button>
}

// Login.jsx
import LoginButton from '../components/LoginButton';

export default function Login(props) {
  return (
    <div>
      <h2>Login 페이지 입니다.</h2>
      <LoginButton {...props} />
    </div>
  )
}
위처럼 props 를 아래로 계속 내려주는 것인데, 사고나기가 매우 쉽다. 좋지 않은 방법이다.
React 에서 이러한 문제를 해결하는 방법으로 HOC, higher order component 를 제공한다.

import { withRouter } from 'react-router-dom';

// 우리가 만든 컴포넌트를 withRouter 의 인자로 넘겨준다.
export default withRouter(function LoginButton(props) {
  console.log(props);
  function login() {
    setTimeout(() => {
      props.history.push('/');
    }, 1000);
  }
  return <button onClick={login}>로그인하기</button>
})