2016-04-15 7 views
2

Angenommen, eine statusfreie, funktionale UserProfile Komponente, die Benutzerdaten für die angegebene URL anzeigt. Angenommen, es wird mit connect(mapStateToProps, mapDispatchToProps)(UserProfile) verpackt. Angenommen, ein Reduzierer reduziert sich auf state.userProfile. Immer wenn sich die URL ändert, muss ich neu initialisieren state.userProfile, so eine Lösung, die den Sinn kommt, so zu tun ist, von innerhalb der mapDispatchToProps etwa so:Soll mapDispatchToProps Initialisierungsaktionen auslösen?

function mapDispatchToProps(dispatch, ownProps) { 
    dispatch(fetchUser(ownProps.userId)) 
    return { 
    ... 
    } 
} 

Vorausgesetzt, dass die thunked fetchUser Anrufe wiederholt ignoriert, indem sie mit Vergleich aktueller Stand, ist das eine akzeptable Praxis? Oder gibt es Probleme, die mit dem sofortigen Aufruf der Versendung aus dieser Kartenfunktion verbunden sind?

Antwort

4

Dies wird nicht unterstützt und kann jederzeit unterbrochen werden.
mapDispatchToProps selbst sollte keine Nebenwirkungen haben.

Wenn Sie Aktionen als Reaktion auf Versand Änderungen zu stützen, können Sie eine Komponentenklasse erstellen und Lifecycle-Methoden für diesen Einsatz:

class UserProfile extends Component { 
    componentDidMount() { 
    this.props.fetchUser(this.props.id) 
    } 

    componentDidUpdate(prevProps) { 
    if (prevProps.id !== this.props.id) { 
     this.props.fetchUser(this.props.id) 
    } 
    } 

    // ... 

} 
+0

Technisch es immer noch eine reine Funktion ist, so weit ich verstehe, aber denken mehr darüber Ich kann mir zirkuläre Versandsituationen vorstellen. Danke für die Bestätigung. –

+1

Wenn es "Versand" nennt, ist es nicht rein - das ist ein Nebeneffekt. –

+0

Ich nehme an, es ist eine Frage der Terminologie, aber wenn man nach der Wikipedia-Definition geht, wertet eine reine Funktion "immer den gleichen Ergebniswert bei gleichen Argumentwerten aus." Vielleicht gibt es eine andere Definition, die Sie im Sinn haben. –