Dva: Как правильно очистить данные в модели под маршрутом

Созданный на 8 сент. 2017  ·  3Комментарии  ·  Источник: dvajs/dva

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

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

В то же время создайте новый метод очистки в редюсере:

clear() {
    return {};
},

Затем отправьте в componentWillUnMount компонента:

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

Позвольте мне спросить вас, ребята, что-то не так с моей манерой письма? Мне кажется немного неправильным писать это.

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

Ссылка, отправленная @sorrycc, получила 404

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

@hanxiansen
Метод записи, который я использовал ранее, заключается в использовании history.listen((location)) в подписках в модели, чтобы судить о текущем введенном маршруте для вызова различных методов. Если это редактирование, сначала получите данные с сервера, а затем визуализируйте , если он будет создан, данные в текущем статусе будут очищены.(только не знаю, подходит ли моя собственная практика).Код такой:

..........
  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,
      }
    },

  },

Нет ничего плохого в том, что вы это делаете, изменение состояния должно идти на редюсер. Однако, если редактирование и новая логика являются модальными, данные не могут быть размещены в модели, обратитесь к методу обработки https://github.com/dvajs/dva/blob/master/packages/dva-example- пользовательская панель/ .

Ссылка, отправленная @sorrycc, получила 404

Была ли эта страница полезной?
0 / 5 - 0 рейтинги