Dva: ¿Cómo actualizar el estado después de que los efectos se ejecuten de forma asincrónica?

Creado en 10 abr. 2018  ·  5Comentarios  ·  Fuente: dvajs/dva

La función esperada es que después de que los efectos adquieran datos de forma asincrónica, la ventana emergente muestra los datos adquiridos. Establezca la propiedad del indicador de estado del componente para determinar si se muestra el componente. Si el atributo de bit de bandera se coloca en el estado del modelo cuando la página salta, el bit de bandera seguirá en el estado y la ventana emergente volverá a aparecer cuando regrese a la página, que es lo que no quiero.

question

Comentario más útil

No use devoluciones de llamada, cada efecto devolverá una promesa después del envío, solo maneje la ventana emergente en la promesa

Todos 5 comentarios

Personalmente, creo que es más apropiado colocar el estado emergente en el estado del componente de reacción.

Si se agrega al estado del componente de reacción, ¿cómo activar la actualización de estado después de la devolución de llamada de efectos? Mi pregunta es esta. ¿Cambia el ciclo de vida de componentWillReceiveProps? ¿O es de otra forma?

Pensé en una solución y no sé si es apropiada.
En la acción de efectos dipatch, además de la carga útil normal, también pasé el método de actualización del estado como parámetro al efecto del modelo y lo llamé más tarde. el código se muestra a continuación:

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

No use devoluciones de llamada, cada efecto devolverá una promesa después del envío, solo maneje la ventana emergente en la promesa

No use devoluciones de llamada, cada efecto devolverá una promesa después del envío, solo maneje la ventana emergente en la promesa

Como lograrlo

¿Fue útil esta página
0 / 5 - 0 calificaciones