【问题标题】:Throttling navigation to prevent the browser from hanging in React App限制导航以防止浏览器在 React App 中挂起
【发布时间】:2019-11-02 04:01:51
【问题描述】:

我正在使用 React 进行登录/注册,并且正在使用 firebase auth 进行身份验证。当用户登录时,我想在根路径或 App 组件上重定向用户。但是我进入了一个无限循环,这给了我这个错误(限制导航以防止浏览器挂起。)

    import React, { useEffect } from "react";
    import ReactDOM from "react-dom";
    import "semantic-ui-css/semantic.min.css";
    import App from "./App";
    import firebase from "firebase";
    import { BrowserRouter, Switch, Route, withRouter } from "react- 
router-dom";
    import Login from "./components/Login";
    import Register from "./components/Register";

    const Root = props => {
      useEffect(() => {
        firebase.auth().onAuthStateChanged(user => {
          if (user) {
            props.history.push("/");
          }
        });
      });
      return (
        <Switch>
          <Route exact path="/" component={App} />
          <Route path="/login" component={Login} />
          <Route path="/register" component={Register} />
        </Switch>
      );
    };

    const RootWithAuth = withRouter(Root);

    ReactDOM.render(
      <BrowserRouter>
        <RootWithAuth />{" "}
      </BrowserRouter>,
      document.getElementById("root")
    );

【问题讨论】:

    标签: reactjs firebase-authentication react-router react-hooks


    【解决方案1】:

    你的问题在useEfect,来自React

    如果你熟悉 React 类生命周期方法,你可以想 useEffect Hook 为 componentDidMount、componentDidUpdate 和 componentWillUnmount 组合。

    您的无限循环是因为您当前使用 useEfect 也作为 componentDidUpdate,只需在 useEfect 末尾添加 [ ] ,这将导致 useEfect 充当 componentDidMount。

    useEffect(() => {
            firebase.auth().onAuthStateChanged(user => {
              if (user) {
                props.history.push("/");
              }
            });
          }, []);
    

    【讨论】:

    • 我忘了把它放在那里,但最后,它对我有用。非常感谢
    猜你喜欢
    • 1970-01-01
    • 2018-11-30
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 2019-09-03
    • 2018-01-07
    • 2019-09-19
    • 1970-01-01
    相关资源
    最近更新 更多