Dva: Wie aktualisiere ich den Zustand, nachdem Effekte asynchron ausgeführt wurden?

Erstellt am 10. Apr. 2018  ·  5Kommentare  ·  Quelle: dvajs/dva

Die erwartete Funktion besteht darin, dass After Effects Daten asynchron erfassen und das Popup-Fenster die erfassten Daten anzeigt. Legen Sie die Eigenschaft des Komponentenstatus-Flags fest, ob die Komponente angezeigt wird. Wenn das Flag Bit-Attribut beim Seitensprung in den Zustand des Modells gesetzt wird, bleibt das Flag-Bit immer noch im Zustand und das Popup-Fenster erscheint beim Zurückkehren auf die Seite wieder, was ich nicht möchte.

question

Hilfreichster Kommentar

Verwenden Sie keine Rückrufe, jeder Effekt gibt nach dem Versand ein Versprechen zurück, behandeln Sie einfach das Popup-Fenster im Versprechen

Alle 5 Kommentare

Persönlich halte ich es für angemessener, den Popup-Zustand in den Zustand der Reaktionskomponente zu setzen.

Wenn es zum Status der Reaction-Komponente hinzugefügt wird, wie wird die Statusaktualisierung nach dem Effects-Callback ausgelöst? Meine Frage ist diese. Ändern Sie den Lebenszyklus von componentWillReceiveProps? Oder geht es anders?

Ich habe mir eine Lösung überlegt und weiß nicht, ob das angebracht ist.
In der Aktion "Dipatch-Effekte" habe ich neben der normalen Nutzlast auch die Methode zum Aktualisieren des Zustands als Parameter an die Wirkung des Modells übergeben und später aufgerufen. Code-Show wie folgt:

//  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,
        });
      }
    },
}

Verwenden Sie keine Rückrufe, jeder Effekt gibt nach dem Versand ein Versprechen zurück, behandeln Sie einfach das Popup-Fenster im Versprechen

Verwenden Sie keine Rückrufe, jeder Effekt gibt nach dem Versand ein Versprechen zurück, behandeln Sie einfach das Popup-Fenster im Versprechen

So erreichen Sie es

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen