nextProps.history.push giriş üzerine işleme bileşeni yeniden değildir

oy
0

Ben yönlendirmeleri kullanıcı bu oturum açarken hesap özetine yüksek mertebeden bileşeni var. Sorun yeniden yönlendirme üzerine işlenmiş değil tablosudur.

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

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

Misiniz kimse sorun olabilir biliyor musunuz? Bu arada karma yönlendirici kullanıyorum

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);
}
Oluştur 13/01/2020 saat 23:51
kaynak kullanıcı
Diğer dillerde...                            


2 cevaplar

oy
2

Sorununuz kullanmak çalışıyorsunuz olmasından kaynaklanmaktadır görevliye benziyor getDerivedStateFromPropskullanım amacı dışında başka bir şey için. Dayanarak dokümanlar bu yan etkiler için bir yer değil, daha ziyade hedef güncelleme durumuna bir nesne döndürmektir gibi görünüyor. Hatta kodu baktığımızda tho ben işe yaramıyor neden bilmek emin diyemem, sana çok iyi sorununuzu çözebilir doğru yaşam döngüsü yöntemi kullanılarak olduğunu düşünüyorum.

Bence componentDidUpdateburada kullanılacak doğru yaşam döngüsü yöntemi olurdu ve böyle küçük bir şey olmazdı.


componentDidUpdate(prevProps) {
    if (prevProps.user.isAuthenticated) {
        prevProps.history.push("/dashboard");
    }
}
Cevap 14/01/2020 saat 00:15
kaynak kullanıcı

oy
0

teşekkürler doğru yönde bana @Chaim, bunu yaparak bunu düzeltmek mümkün oldu

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

}

Ayrıca kullanarak <Router>yerine<HashRouter>

Cevap 14/01/2020 saat 03:49
kaynak kullanıcı

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