Dva: So löschen Sie die Daten im Modell unter einer Route korrekt

Erstellt am 8. Sept. 2017  ·  3Kommentare  ·  Quelle: dvajs/dva

Ich schreibe jetzt eine Seite zum Bearbeiten von Nachrichten, weil die Logik des Bearbeitens und Erstellens dieselbe ist, also habe ich sie auf derselben Seite geschrieben, aber das Problem ist, dass, wenn ich die Bearbeitungslogik betrete, das Modell des Nachrichteneditors erhalten bleibt in den Modelldaten, wenn ich das nächste Mal mit der Logik zum Erstellen einer neuen Nachricht hereinkomme, lade ich die verbleibenden Modelldaten von der letzten Bearbeitung der Nachricht, was sich auf die Seite auswirkt. So wie ich das Modell jetzt lösche, ist So schreiben Sie eine clearModel-Methode in Effekten:

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

Erstellen Sie gleichzeitig eine neue klare Methode im Reducer:

clear() {
    return {};
},

Dann sende in componentWillUnMount der Komponente:

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

Ich frage euch, stimmt etwas mit meiner Art zu schreiben nicht? Es fühlt sich ein bisschen falsch an, das zu schreiben.

Hilfreichster Kommentar

Der von @sorrycc gesendete Link hat 404 erhalten

Alle 3 Kommentare

@hanxiansen
Eine Schreibmethode, die ich zuvor verwendet habe, besteht darin, history.listen((location)) in den Abonnements im Modell zu verwenden, um die aktuell eingegebene Route zu beurteilen, um verschiedene Methoden aufzurufen.Wenn es sich um eine Bearbeitung handelt, holen Sie sich zuerst die Daten vom Server und rendern Sie sie dann , wenn es erstellt wird, werden die Daten im aktuellen Status gelöscht. (Ich weiß nur nicht, ob meine eigene Praxis angemessen ist). Der Code lautet wie folgt:

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

  },

Es ist nichts falsch daran, die Zustandsänderung muss zum Reduzierer gehen. Wenn die Bearbeitung und neue Logik jedoch modal ist, können die Daten aus dem Modell weggelassen werden. Siehe https://github.com/dvajs/dva/blob/master/packages/dva-example-user-dashboard/ für die Verarbeitungsmethode.

Der von @sorrycc gesendete Link hat 404 erhalten

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen