Dva: Как обновить состояние после асинхронного выполнения эффектов?

Созданный на 10 апр. 2018  ·  5Комментарии  ·  Источник: dvajs/dva

Ожидаемая функция заключается в том, что после того, как эффекты получают данные асинхронно, во всплывающем окне отображаются полученные данные. Установите свойство флага состояния компонента, указывающее, отображается ли компонент. Если атрибут флагового бита помещается в состояние модели при переходе страницы, бит флага все равно останется в этом состоянии, и всплывающее окно появится снова при возврате на страницу, чего я не хочу.

question

Самый полезный комментарий

Не используйте обратные вызовы, каждый эффект будет возвращать обещание после отправки, просто обработайте всплывающее окно в обещании

Все 5 Комментарий

Лично я считаю, что всплывающее окно более целесообразно поместить в состояние компонента реакции.

Если он добавлен к состоянию компонента реакции, как запустить обновление состояния после обратного вызова эффектов? У меня такой вопрос. Вы меняете жизненный цикл componentWillReceiveProps? Или это по-другому?

Я придумал решение и не знаю, подходит ли оно.
В действии эффектов dipatch, в дополнение к обычной полезной нагрузке, я также передал метод обновления состояния в качестве параметра для эффекта модели и вызвал его позже. код показан ниже:

//  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 рейтинги