Dva: Cara menghapus data dengan benar dalam model di bawah rute

Dibuat pada 8 Sep 2017  ·  3Komentar  ·  Sumber: dvajs/dva

Saya menulis halaman untuk mengedit berita sekarang, karena logika mengedit dan membuat sama, jadi saya menulisnya di halaman yang sama, tetapi masalahnya ketika saya memasukkan logika pengeditan, model editor berita akan tetap ada. dalam Data model, ketika saya masuk dengan logika membuat berita baru lain kali, saya akan memuat data model residual dari terakhir kali saya mengedit berita, yang akan memengaruhi halaman. Cara saya sekarang menghapus modelnya adalah untuk menulis metode clearModel di efek:

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

Pada saat yang sama, buat metode baru yang jelas di peredam:

clear() {
    return {};
},

Kemudian kirim di componentWillUnMount dari komponen:

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

Izinkan saya bertanya kepada Anda, apakah ada yang salah dengan cara saya menulis? Rasanya agak salah untuk menulis itu.

Komentar yang paling membantu

Tautan yang dikirim oleh @sorrycc mendapat 404

Semua 3 komentar

@hanxiansen
Metode penulisan yang saya gunakan sebelumnya adalah menggunakan history.listen((location)) dalam langganan dalam model untuk menilai rute yang saat ini dimasukkan untuk memanggil metode yang berbeda.Jika sedang mengedit, pertama-tama dapatkan data dari server dan kemudian render , jika sudah Jika dibuat, maka data yang ada pada status sekarang akan terhapus.(Saya tidak tahu apakah praktek saya sendiri sudah sesuai).Kodenya adalah sebagai berikut:

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

  },

Tidak ada salahnya Anda melakukan ini, perubahan keadaan harus pergi ke peredam. Namun, jika pengeditan dan logika baru adalah modal, data dapat dikeluarkan dari model. Lihat https://github.com/dvajs/dva/blob/master/packages/dva-example-user-dashboard/ untuk metode pengolahan.

Tautan yang dikirim oleh @sorrycc mendapat 404

Apakah halaman ini membantu?
0 / 5 - 0 peringkat