Я работаю над входом/регистрацией в React и использую аутентификацию firebase для аутентификации. Когда пользователь вошел в систему, я хочу перенаправить пользователя на корневой путь или на компонент приложения. Но я попал в бесконечный цикл, который дает мне эту ошибку (Дросселирование навигации для предотвращения зависания браузера).
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, от Реагировать:
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("/");
}
});
}, []);
Я забыл положить его туда, но, наконец, это работает для меня. Большое спасибо