Задать вопрос
@Stanislav_Bykov

Почему в консоли выскакивает Warning: Cannot update during an existing state transition (such as within `render`).?

Я пытаюсь сделать проверку авторизации в приложении, написанном с помощью React Router v4.
Код выглядит следующим образом:
...
<Route render={(props) => {requireAuth(props); return <LoggedInLayout/>;}} />
//Перед тем, как перейти на определенный роут, проходит процесс проверки авторизовал ли пользователь или нет
...
function requireAuth(props) {
    if (!SessionStore.isLoggedIn() && props.location.pathname.indexOf('login') === -1) {
        props.history.location.state = {nextPathname: props.location.pathname};
        props.history.replace('/login');
    }
}

При выполнении данной проверки в консоль вываливается предупреждение:
Warning: Cannot update during an existing state transition (such as within `render`). Render methods should be a pure function of props and state. react-dom.development.js?61bb:506

Методом проб и ошибок выяснил, что строка "props.history.replace('/login');" выдает этот Warning.

Подскажите пожалуйста, по какой причине в консоли показывается предупреждение, и каким образом это можно исправить?
  • Вопрос задан
  • 6254 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
@SeaBreeze876
Front-end разработчик
<Route 
    render={props => isRequireAuth() ? <Redirect to={{pathname: "/login", state: {nextPathname: props.location.pathname}}}/> : <LoggedInLayout/>} 
/>

function isRequireAuth(props) {
    return !SessionStore.isLoggedIn() && props.location.pathname.indexOf('login') === -1
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы