Dva: エフェクトが非同期に実行された後に状態を更新する方法は?

作成日 2018年04月10日  ·  5コメント  ·  ソース: dvajs/dva

期待される機能は、エフェクトが非同期的にデータを取得した後、取得したデータをポップアップウィンドウに表示することです。コンポーネントを表示するかどうかのコンポーネント状態フラグ プロパティを設定します。ページがジャンプしたときにフラグ ビット属性がモデルの状態に設定されている場合、フラグ ビットは状態のままであり、ページに戻ったときにポップアップ ウィンドウが再び表示されます。これは、私が望んでいないことです。

question

最も参考になるコメント

コールバックを使用しないでください。すべてのエフェクトはディスパッチ後にプロミスを返します。プロミスでポップアップ ウィンドウを処理するだけです。

全てのコメント5件

個人的にはポップアップ状態は反応部品の状態にした方が適切だと思います。

反応コンポーネントの状態に追加された場合、エフェクトのコールバック後に状態の更新をトリガーするにはどうすればよいですか?私の質問はこれです。 componentWillReceiveProps のライフサイクルを変更しますか?それとも別の方法ですか?

解決策を考えましたが、これが適切かどうかわかりません。
エフェクトのディスパッチ アクションでは、通常のペイロードに加えて、状態を更新するメソッドもモデルのエフェクトにパラメーターとして渡し、後で呼び出しました。コードは以下のように表示されます:

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

コールバックを使用しないでください。すべてのエフェクトはディスパッチ後にプロミスを返します。プロミスでポップアップ ウィンドウを処理するだけです。

コールバックを使用しないでください。すべてのエフェクトはディスパッチ後にプロミスを返します。プロミスでポップアップ ウィンドウを処理するだけです。

それを達成する方法

このページは役に立ちましたか?
0 / 5 - 0 評価