利用useContext使用ReactRouter

Posted on Jul 8, 2019

React Router 的history.push

import React, { useState, useContext, useEffect } from 'react';
import { __RouterContext } from "react-router";

const Login: React.FC = () => {
  const [token, setToken] = useState('');
  const { history } = useContext(__RouterContext);

  useEffect(() => {
    if (token) {
      history.push('/list')
    }
  }, [token, history]);

  return (
    <>
      <button onClick={()=>setToken('666')}>登录</button>
    </>
  );
}

这段代码的逻辑是,等级登录按钮,设置token变量。当token变量变化时,触发useEffect调用ReactRouter的history.push切换路由。history对象是通过useContext获得到的,可以拿到location、history、match等3个对象。