Dva: Comment mettre à jour l'état après l'exécution asynchrone des effets ?

Créé le 10 avr. 2018  ·  5Commentaires  ·  Source: dvajs/dva

La fonction attendue est qu'après effets acquérir des données de manière asynchrone, la fenêtre contextuelle affiche les données acquises. Définissez la propriété d'indicateur d'état du composant pour savoir si le composant est affiché. Si l'attribut flag bit est placé dans l'état du modèle lorsque la page saute, le flag bit restera toujours dans l'état et la fenêtre contextuelle réapparaîtra lors du retour à la page, ce que je ne veux pas.

question

Commentaire le plus utile

N'utilisez pas de rappels, chaque effet renverra une promesse après l'envoi, il suffit de gérer la fenêtre contextuelle dans la promesse

Tous les 5 commentaires

Personnellement, je pense qu'il est plus approprié de placer l'état pop-up dans l'état du composant de réaction.

S'il est ajouté à l'état du composant React, comment déclencher la mise à jour de l'état après le rappel des effets ? Ma question est la suivante. Changez-vous le cycle de vie de componentWillReceiveProps ? Ou est-ce une autre manière ?

J'ai pensé à une solution, et je ne sais pas si cela est approprié.
Dans l'action d'effets dipatch, en plus de la charge utile normale, j'ai également transmis la méthode de mise à jour de l'état en tant que paramètre à l'effet du modèle, et je l'ai appelée plus tard. le code s'affiche comme ci-dessous :

//  route components.js
showDetail = (record) => {
    const { dispatch } = this.props;
    dispatch({
      type: effects.getDetail,
      payload: { id: record.id },
      callback: () => {
        this.setState({
          detailVisible: true,
        });
      },
    });
  };
// models
effects: {
*getDetail({ payload, callback }, { call, put }) {
      const response = yield call(getDetail, payload);
      if (response.success) {
        if (callback && typeof callback === 'function') {
          callback();
        }
        yield put({
          type: 'getDetailSuccess',
          payload: response,
        });
      }
    },
}

N'utilisez pas de rappels, chaque effet renverra une promesse après l'envoi, il suffit de gérer la fenêtre contextuelle dans la promesse

N'utilisez pas de rappels, chaque effet renverra une promesse après l'envoi, il suffit de gérer la fenêtre contextuelle dans la promesse

Comment y parvenir

Cette page vous a été utile?
0 / 5 - 0 notes