現在、ニュース編集用のページを書いています。編集と作成のロジックが同じなので、同じページに書いていますが、編集ロジックに入ると、ニュースエディタのモデルが残るという問題があります。モデルデータでは、次回新しいニュースを作成するロジックを使用するときに、前回ニュースを編集したときの残りのモデルデータをロードします。これは、ページに影響します。モデルをクリアする方法は次のとおりです。エフェクトでclearModelメソッドを作成するには:
*clearModel({ payload }, { put }) {
yield put({
type: 'clear',
});
},
同時に、レデューサーで新しいclearメソッドを作成します。
clear() {
return {};
},
次に、コンポーネントのcomponentWillUnMountにディスパッチします。
dispatch({
type: 'model/clearModel',
payload: {}
});
皆さんに聞いてみましょう、私の書き方に何か問題がありますか?それを書くのは少し間違っていると感じます。
@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を取得しました
最も参考になるコメント
@sorryccによって送信されたリンクは404を取得しました