Dva: Cómo borrar correctamente los datos en el modelo bajo una ruta

Creado en 8 sept. 2017  ·  3Comentarios  ·  Fuente: dvajs/dva

Estoy escribiendo una página para editar noticias ahora, porque la lógica de editar y crear es la misma, así que la escribí en la misma página, pero el problema es que cuando entro en la lógica de edición, el modelo del editor de noticias permanecerá. en los datos del modelo, cuando entre con la lógica de crear una nueva noticia la próxima vez, cargaré los datos del modelo residual de la última vez que edité las noticias, lo que afectará a la página. La forma en que ahora borro el modelo es para escribir un método clearModel en efectos:

*clearModel({ payload }, { put }) {
    yield put({
        type: 'clear',
    });
},

Al mismo tiempo, cree un nuevo método claro en el reductor:

clear() {
    return {};
},

Luego despache en componentWillUnMount del componente:

dispatch({
    type: 'model/clearModel',
    payload: {}
});

Permítanme preguntarles, ¿hay algo mal con mi forma de escribir? Se siente un poco mal escribir eso.

Comentario más útil

El enlace enviado por @sorrycc obtuvo 404

Todos 3 comentarios

@hanxiansen
Un método de escritura que he usado antes es usar history.listen((ubicación)) en las suscripciones en el modelo para juzgar la ruta ingresada actualmente para llamar a diferentes métodos. Si está editando, primero obtenga los datos del servidor y luego renderice , si es Si se crea, los datos en el estado actual se borrarán. (Simplemente no sé si mi propia práctica es apropiada). El código es el siguiente:

..........
  state: {
    topicData: {},
    topicId: '',
  },

  subscriptions: {

    setup ({ dispatch, history }) {
      history.listen((location) => {
        const match = pathToRegexp('/topic/:id/edit').exec(location.pathname)
        if (match) {
          dispatch({
            type: 'getTopic',
            payload: { id: match[1] },
          })
        } else {
          dispatch({
            type: 'updateState',
            payload: { topicData: {}, topicId: '' },
          })
        }
      })
    },

  },

..........
  effects: {
    * getTopic ({ payload }, { call, put }) {
      const accesstoken = localStorage.getItem('accesstoken')
      let params = { accesstoken }
      params = Object.assign(params, payload)
      let data = yield call(getTopic, params)
      console.log(data)
      if (data.success) {
        data = { topicData: data.data, topicId: data.data.id }
        // yield put({
        //   type: 'setTopicId',
        //   payload: { topicId: payload.id },
        // })
        yield put({ type: 'updateState',
          payload: data,
        })
      }
    },
.......
},

  reducers: {
     ........
    updateState (state, { payload }) {
      return {
        ...state,
        ...payload,
      }
    },

  },

No hay nada de malo en que hagas esto, el cambio de estado debe ir al reductor. Sin embargo, si la edición y la nueva lógica son modales, los datos pueden quedar fuera del modelo. Consulte https://github.com/dvajs/dva/blob/master/packages/dva-example-user-dashboard/ para el método de procesamiento.

El enlace enviado por @sorrycc obtuvo 404

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