Dva: Como atualizar o estado após os efeitos serem executados de forma assíncrona?

Criado em 10 abr. 2018  ·  5Comentários  ·  Fonte: dvajs/dva

A função esperada é que, após os efeitos adquirirem os dados de forma assíncrona, a janela pop-up exiba os dados adquiridos. Defina a propriedade do sinalizador de estado do componente para saber se o componente é exibido. Se o atributo do bit de flag for colocado no estado do modelo quando a página pular, o bit de flag ainda permanecerá no estado e a janela pop-up aparecerá novamente ao retornar à página, que é o que eu não quero.

question

Comentários muito úteis

Não use callbacks, todo efeito retornará uma promessa após o envio, apenas manipule a janela pop-up na promessa

Todos 5 comentários

Pessoalmente, acho que é mais apropriado colocar o estado pop-up no estado do componente de reação.

Se for adicionado ao estado do componente de reação, como acionar a atualização de estado após o retorno de chamada dos efeitos? Minha pergunta é esta. Você altera o ciclo de vida de componentWillReceiveProps? Ou é de outra forma?

Pensei em uma solução e não sei se isso é apropriado.
Na ação de efeitos dipatch, além da carga útil normal, também passei o método de atualização do estado como um parâmetro para o efeito do modelo, e o chamei mais tarde. código mostrado abaixo:

//  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ão use callbacks, todo efeito retornará uma promessa após o envio, apenas manipule a janela pop-up na promessa

Não use callbacks, todo efeito retornará uma promessa após o envio, apenas manipule a janela pop-up na promessa

Como conseguir

Esta página foi útil?
0 / 5 - 0 avaliações