Превышена максимальная глубина обновления. Это может произойти, когда компонент неоднократно вызывает setState внутри componentWillUpdate
или componentDidUpdate
. React ограничивает количество вложенных обновлений, чтобы предотвратить бесконечные циклы.
import React, { Component } from "react";
import { BrowserRouter, Route, Redirect, Switch } from "react-router-dom";
import Login from "./component/auth/Login";
import HomeScreen from "./component/home-screen/HomeScreen";
class App extends Component {
constructor(props) {
super(props);
this.state = {
user: {}
};
}
componentDidMount() {
this.authListener();
}
authListener() {
firebase.auth().onAuthStateChanged(user => {
if (user) {
this.setState({ user });
} else {
this.setState({ user: null });
}
});
}
render() {
return (
<BrowserRouter>
<div className = "App">
<Switch>
<Route exact path = "/" component = {Landing} />
{this.state.user ? (
<Redirect to = "/homescreen" />
) : (
<Redirect to = "/login" />
)}
<Route exact path = "/login" component = {Login} />
<Route exact path = "/homescreen" component = {HomeScreen} />
<Route exact path = "/users" component = {Users} />
<Route exact path = "/users/:id" component = {UserDetail} />
<Route component = {Error} />
</Switch>
</div>
</BrowserRouter>
);
}
}
export default App;
да я пишу ошибку сверху перед кодом
Превышена максимальная глубина обновления. Это может произойти, когда компонент неоднократно вызывает setState внутри componentWillUpdate или componentDidUpdate. React ограничивает количество вложенных обновлений, чтобы предотвратить бесконечные циклы.
Ваш логин перенаправления неверен... пустой объект оценивается как true, попробуйте установить user:null в конструкторе() вместо пустого объекта
какая версия реактивного маршрутизатора?
"реакция-маршрутизатор-дом": "^ 5.0.0"
та же ошибка, когда я устанавливаю пользователя null в конструкторе
React Router v4+ поддерживает использование PrivateRoute
.
// create a private route, if user is not logged in redirect to login page
const PrivateRoute = ({ component: Component, ...rest }) => (
<Route {...rest} render = {(props) => (
isAuthenticated() === true
? <Component {...props} />
: <Redirect to='/login' />
)} />
)
Используйте его как обычный маршрут и проверьте аутентификацию на частном маршруте.
<BrowserRouter>
<Route path = "/login" exact component = {FormularAuth} />
<PrivateRoute path='/private' component = {Private} />
</BrowserRouter>
я не знаю, как мы можем это сделать
да, методом защищенного маршрута
//App.js
class App extends Component {
constructor(props) {
super(props);
this.state = {
user: ""
};
}
componentDidMount() {
this.authListener();
}
authListener() {
firebase.auth().onAuthStateChanged(user => {
if (user) {
this.setState({
user
});
} else {
this.setState({
user: null
});
}
});
}
render() {
return (
<BrowserRouter>
<div className = "App">
<Switch>
<Route exact path = "/" component = {(props)=><Landing {...props} users = {this.state.user}/>}/>
<Route exact path = "/login" component = {Login} />
<Route exact path = "/homescreen" component = {HomeScreen} />
</Switch>
</div>
</BrowserRouter>
);
}
}
export default App;
в вашем посадочном компоненте проверьте значение пользователя и перейдите к соответствующим маршрутам.
//Landing.js
class Landing extends Component {
componentDidMount() {
if (this.props.users) {
this.props.history.push("homescreen")
} else if (this.props.users === null) {
this.props.history.push("login")
}
}
render() {
return (
<div>
<h1>landing page</h1>
</div>
);
}
}
спасибо за решение ошибки ответа используйте privateRoute для перенаправления еще раз спасибо
вы получаете какие-либо ошибки?