限制导航以防止浏览器在 React App 中挂起
Throttling navigation to prevent the browser from hanging in React App
我正在使用 React 进行 Login/Register 的开发,我正在使用 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")
);
你的问题在useEfect, 来自React:
If you’re familiar with React class lifecycle methods, you can think
of useEffect Hook as componentDidMount, componentDidUpdate, and
componentWillUnmount combined.
你的无限循环是因为你目前使用useEfect也作为componentDidUpdate,只需在useEfect末尾添加[],这将使useEfect充当componentDidMount。
useEffect(() => {
firebase.auth().onAuthStateChanged(user => {
if (user) {
props.history.push("/");
}
});
}, []);
我正在使用 React 进行 Login/Register 的开发,我正在使用 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")
);
你的问题在useEfect, 来自React:
If you’re familiar with React class lifecycle methods, you can think of useEffect Hook as componentDidMount, componentDidUpdate, and componentWillUnmount combined.
你的无限循环是因为你目前使用useEfect也作为componentDidUpdate,只需在useEfect末尾添加[],这将使useEfect充当componentDidMount。
useEffect(() => {
firebase.auth().onAuthStateChanged(user => {
if (user) {
props.history.push("/");
}
});
}, []);