Empêcher de réagir composant de rendu à deux reprises lors de l'utilisation de redux avec componentWillMount

J'ai une Réagir composant qui distribue un redux de modification de l'état dans son componentWillMount fonction. La raison en est que lorsque le composant est chargé, il doit obtenir le id à partir de l'url (alimenté par react-router), et de déclencher une action qui définit l'état que idde données de l'.

Ici est le composant:

class Editor extends React.Component {

    componentWillMount() {
        const { dispatch, params } = this.props
        dispatch(editItem(params.id))
    }

    render() {
        const item = this.props.item
        console.log("Editing", item)
    }
}

export default connect(state => ({item: state.item}))(Editor)

Le hic, c'est render est appelé deux fois. item est pas défini sur le premier appel, et valable sur le deuxième. Idéalement, il ne doit être appelé qu'une seule fois this.props.item existe réellement (après la editItem action a été distribué et exécuter).

Selon la Réagir docs: "Si vous appelez setState dans cette méthode, render() permettra de voir l'état mis à jour et sera exécutée qu'une seule fois malgré le changement d'état."

Dans redux, dispatch est l'équivalent d'appeler setState, car cela entraîne un changement d'état. Cependant, je devine quelque chose dans la façon connect fonctionne toujours provoque render être appelé deux fois.

Est-il un moyen de contourner cela en plus d'ajouter une ligne comme if (!item) return; ?

InformationsquelleAutor Luke Sapan | 2015-12-18