nextProps.history.push повторно не делает компонент при входе в систему

голоса
0

У меня есть компонент высокого порядка, что пользователь перенаправляет на приборную панель при входе в. Дело в том, приборной панели не повторно вынесен на перенаправление.

    static getDerivedStateFromProps(nextProps) {
      if (nextProps.user.isAuthenticated) {
        nextProps.history.push(/dashboard);

      }
      if (nextProps.errors) {
        return { errors: nextProps.errors };
      }
      return null;
    }

Будет ли кто-нибудь знает, что может быть проблема? Я использую хэш-маршрутизатор, кстати

isAuthenticated (FullCode)

import React, { Component } from react;
import { connect } from react-redux;
import {  initLogin } from ../../actions/userActions;

export interface authHocProps {
  user?: any;
  history?: any;
  initLogin: () => void;
}
export interface authState {
  errors: object;
}
export default function(WrappedComponent) {
  class IsAuth extends Component<authHocProps, authState> {
    //   this line is magic, redirects to the dashboard after user signs up
    // this replace getDerivedStateFromPropss
    static getDerivedStateFromProps(nextProps) {
      if (nextProps.user.isAuthenticated) {
        nextProps.history.push(/dashboard);

      }
      if (nextProps.errors) {
        return { errors: nextProps.errors };
      }
      return null;
    }
    ourState: authState = {
      errors: {},
    };
    componentDidMount() {
      this.props.initLogin();
      if (this.props.user.isAuthenticated) {
        this.props.history.push(/dashboard);
      }

    }
    render() {
      return <WrappedComponent {...this.props} />;
    }
  }
  const mapStateToProps = (state: any) => ({
    user: state.user,
  });
  const mapDispatchToProps = (dispatch: any) => ({
    initLogin: () => dispatch(initLogin()),
  });
  return connect(mapStateToProps, mapDispatchToProps)(IsAuth);
}
Задан 13/01/2020 в 23:51
источник пользователем
На других языках...                            


2 ответов

голоса
2

Похоже , ваша проблема может быть из - за того , что вы пытаетесь использовать getDerivedStateFromPropsчто - то другое , чем его предполагаемое использование. На основе документации , похоже , это не место для побочных эффектов, а цель состоит в том, чтобы вернуть объект в состояние обновления. Даже Тхо , глядя на ваш код , который я не могу точно сказать , что я знаю , почему это не работает, я думаю , что с помощью правильного метода жизненного цикла вы очень хорошо может решить вашу проблему.

Я думаю , что componentDidUpdateбыло бы правильным методом жизненного цикла , чтобы использовать здесь , и это будет выглядеть немного что - то вроде этого.


componentDidUpdate(prevProps) {
    if (prevProps.user.isAuthenticated) {
        prevProps.history.push("/dashboard");
    }
}
Ответил 14/01/2020 в 00:15
источник пользователем

голоса
0

Был в состоянии исправить это, делая это, благодаря @Chaim для меня в правильном направлении

componentDidUpdate(prevProps){
  if(prevProps.user.isAuthenticated !== this.props.user.isAuthenticated){
    this.props.history.push("/dashboard");
  }
  if (prevProps.errors) {
    this.setState({
      errors: prevProps.errors
    })
  }

}

Кроме того , используя <Router>вместо<HashRouter>

Ответил 14/01/2020 в 03:49
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more