Dva: Bagaimana cara memperbarui status setelah efek dieksekusi secara tidak sinkron?

Dibuat pada 10 Apr 2018  ·  5Komentar  ·  Sumber: dvajs/dva

Fungsi yang diharapkan adalah bahwa setelah efek memperoleh data secara asinkron, jendela pop-up menampilkan data yang diperoleh. Setel properti flag state komponen apakah komponen akan ditampilkan. Jika atribut bit bendera ditempatkan dalam status model ketika halaman melompat, bit bendera akan tetap dalam status dan jendela pop-up akan muncul lagi ketika kembali ke halaman, yang tidak saya inginkan.

question

Komentar yang paling membantu

Jangan gunakan panggilan balik, setiap efek akan mengembalikan janji setelah pengiriman, cukup tangani jendela sembul di janji

Semua 5 komentar

Secara pribadi, saya pikir lebih tepat untuk menempatkan status pop-up di status komponen reaksi.

Jika ditambahkan ke status komponen reaksi, bagaimana cara memicu pembaruan status setelah panggilan balik efek? Pertanyaan saya adalah ini. Apakah Anda mengubah siklus hidup componentWillReceiveProps? Atau itu cara lain?

Saya memikirkan solusi, dan saya tidak tahu apakah ini tepat.
Dalam aksi efek dipatch, selain muatan normal, saya juga meneruskan metode pembaruan status sebagai parameter ke efek model, dan menyebutnya nanti. kode tampilkan seperti di bawah ini:

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

Jangan gunakan panggilan balik, setiap efek akan mengembalikan janji setelah pengiriman, cukup tangani jendela sembul di janji

Jangan gunakan panggilan balik, setiap efek akan mengembalikan janji setelah pengiriman, cukup tangani jendela sembul di janji

Bagaimana mencapainya?

Apakah halaman ini membantu?
0 / 5 - 0 peringkat