2017-11-28 1 views
0

Ich habe Probleme, die Komponente nach einer Aktion erneut zu rendern. Ich verstehe, dass ich ein neues Objekt in meinem Minderer zurückgeben muss, so dass ich einen ganz neuen Zustand zurückkehrt, aber es ist immer noch kein componentDidMount() oder render()Redux ComponentDidMount wird nicht ausgelöst

Meine Component auslösenden:

class AppTemplate extends React.Component { 

    constructor(props) { 
     super(props); 

     if(!this.props.settings.user){ 
      this.props.dispatch(userActions.get()); 
     } 
    } 

    componentDidUpdate(prevProps, prevState) { 

     console.log(prevProps, this.props); 

     //do some stuff 

    } 


    render() { 

     return (
      <SomeComponent/> 
     ); 
    } 
} 

function mapStateToProps(state) { 
    const { registration, role, settings } = state; 
    console.log(role); 
    return { 
     registration, 
     role, 
     settings 
    }; 
} 

const connectedAppTemplate = connect(mapStateToProps)(AppTemplate); 
export { connectedAppTemplate as AppTemplate }; 

My Reducer:

Die Aktion wird ohne Probleme ausgeführt, und selbst der mapToState protokolliert mit der neuen Rolle, aber der componentDidMount wird nie ausgelöst. Irgendwelche Gedanken?

Danke!

+0

Wo ist 'componentDidMount'? –

+0

Achten Sie darauf, die gegebene Antwort als akzeptiert zu markieren, wenn es Ihnen hilft ... –

Antwort

1

componentDidMount wird nur EINMAL genannt. In diesem Fall wird die Komponente zum ersten Mal geladen. Wenn Sie den Redux-Shop aktualisieren, erhalten Sie Anrufe an die componentWillReceiveProps und wenn Sie dort eine Render auszulösen, werden Sie sehen, componentDidUpdate wird ausgelöst.

EDIT: Während die Komponente wieder rendern wird, wenn neue Requisiten über Redux empfangen werden ... componentDidMount wird immer noch nur einmal aufgerufen. Sie sind besser dran mit componentWillReceiveProps und componentDidUpdate für das, was Sie erreichen möchten.

Kredit an Dan O in den Kommentaren unten (das reimte) für das Aufzeigen meines Fehlers.

+0

Komponenten automatisch neu zu rendern, wenn sie neue Requisiten bekommen, außer Sie schreiben eine 'shouldComponentUpdate'-Funktion, die anders entscheidet. –

+0

@DanO du bist richtig, ich sollte meine Antwort ändern. Ich versuche Pure Components zu schreiben, in meinem Fall habe ich normalerweise Recht. –

+0

@DanO mit dem Bearbeiten getan und Ihnen gutgeschrieben für das Aufzeigen. Vielen Dank. –

Verwandte Themen