反应路由器和上下文

时间:2021-03-12 04:42:09

标签: reactjs react-router react-router-dom context-api

我在我的项目中使用了 useContext 和 react-routers,其结构如下:

<AppProvider>
  <Router>
    <Switch>
      <Route exact path="/">
        <Home />
      </Route>
      <Route exact path="/about">
        <About />
      </Route>
    </Switch>
  </Router>
</AppProvider>

我想从我的上下文文件导航到一个路径,但我不能,因为它在路由器之外。实现这一目标的最佳方法是什么?

我想要的(在 context.js 的 AppProvider 组件中):

let history = useHistory()

useEffect(() => {
  const unsubscribe = projectAuth.onAuthStateChanged((authUser) => {
    if (authUser) {
      history.push("/about");
    }
  });
  return unsubscribe;
}, []);

1 个答案:

答案 0 :(得分:1)

您可以重构您的布局,用 AppProvider 包裹 Router,然后一切都会正常,因为 AppProvider 将在您使用 useHistory< 时获得路由器使用的历史对象/p>

<Router>
  <AppProvider>
    <Switch>
      <Route exact path="/">
        <Home />
      </Route>
      <Route exact path="/about">
        <About />
      </Route>
    </Switch>
  </AppProvider>
</Router>