nextProps.history.push není znovu vykreslování složku po přihlášení

hlasů
0

Mám vysoký součást objednávky, které uživatele přesměruje na přístrojové desce po přihlášení. Problém je přístrojová deska není re vykreslen na přesměrování.

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

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

Někdo vědět, co tato otázka by mohla být? Já používám hash router mimochodem

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);
}
Položena 13/01/2020 v 23:51
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
2

Vypadá to, že váš problém může být způsobeno tím, že se pokoušíte použít getDerivedStateFromPropsna něco jiného než jeho zamýšlené použití. Na bázi dokumenty , vypadá to, že to není místo pro vedlejší účinky, ale cílem je vrátit objekt do stavu aktualizace. Dokonce i tho dívá na váš kód nemohu s jistotou říci, že vím, proč to nefunguje, myslím si, že pomocí správného způsobu životního cyklu může velmi dobře vyřešit váš problém.

Myslím, že componentDidUpdateby bylo správné metody životního cyklu zde používá a to bude vypadat něco takového.


componentDidUpdate(prevProps) {
    if (prevProps.user.isAuthenticated) {
        prevProps.history.push("/dashboard");
    }
}
Odpovězeno 14/01/2020 v 00:15
zdroj uživatelem

hlasů
0

Byl schopen opravit tím, že dělá to, díky @Chaim pro mne tím správným směrem

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

}

Také pomocí <Router>Namísto<HashRouter>

Odpovězeno 14/01/2020 v 03:49
zdroj uživatelem

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