Я сейчас пишу страницу для редактирования новостей, так как логика редактирования и создания одинакова, поэтому я написал ее в той же странице, но проблема в том, что при входе в логику редактирования модель редактора новостей останется в данных модели, когда я в следующий раз войду с логикой создания новой новости, я загружу остаточные данные модели с момента последнего редактирования новости, что повлияет на страницу.Способ, которым я сейчас очищаю модель, чтобы написать метод clearModel в эффектах:
*clearModel({ payload }, { put }) {
yield put({
type: '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