Dva: ルートの下のモデルのデータを正しくクリアする方法

作成日 2017年09月08日  ·  3コメント  ·  ソース: dvajs/dva

現在、ニュース編集用のページを書いています。編集と作成のロジックが同じなので、同じページに書いていますが、編集ロジックに入ると、ニュースエディタのモデルが残るという問題があります。モデルデータでは、次回新しいニュースを作成するロジックを使用するときに、前回ニュースを編集したときの残りのモデルデータをロードします。これは、ページに影響します。モデルをクリアする方法は次のとおりです。エフェクトでclearModelメソッドを作成するには:

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

同時に、レデューサーで新しい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 評価