我正在使用一个reducer来管理应用程序上的各种状态。但每次我在初始状态中添加一个新密钥时,就像这样:
const initialState = {
loading: false,
archiveTypes: [],
archiveType: {
id: null,
name: '',
local: '',
description: '',
}
}
initialState从不显示新信息,直到我向reducer发送一些信息。
有没有办法让它从所有信息开始?
我的完整代码:
import * as actionTypes from 'actions';
import produce from 'immer';
const initialState = {
loading: false,
archiveTypes: [],
archiveType: {
id: null,
name: '',
local: '',
description: '',
}
}
const archiveTypeReducer = produce((draft, action) => {
switch (action.type) {
case actionTypes.ARCHIVE_TYPE_GET_ALL_SUCCESS: {
draft.loading = false;
try {
draft.archiveTypes = action.payload
} catch (err) {
console.log(`REDUCER ERROR ${err}`)
}
return draft;
}
case actionTypes.ARCHIVE_TYPE_GET_BY_ID_SUCCESS: {
draft.loading = false;
try {
draft.archiveType = action.payload
} catch (err) {
console.log(`REDUCER ERROR ${err}`)
}
return draft;
}
case actionTypes.ARCHIVE_TYPE_REQUEST_FAILURE: {
draft = initialState
return draft
}
default: {
return draft;
}
}
}, initialState);
export default archiveTypeReducer;
在Redux应用程序中,您的初始状态正是:您的初始状态。如果你想在页面加载后更改你的状态,你必须调度一个操作来完成
如果你想要一种完全重置状态的方法,那么你需要创建一个RESET_ALL_STATE
操作(或者在你的情况下,你的actionTypes.ARCHIVE_TYPE_REQUEST_FAILURE
似乎恢复了初始状态(。但实际上,这很不正常;通常情况下,您只想使用ADD_SPECIFIC_DATA
操作。
例如,您可以在component live circle的方法中调用action,比如componentDidMount。或者反作用钩子,useEffecthttps://reactjs.org/docs/react-component.html#componentdidmount
还有一件事,您忘记了将initiasState设置为默认状态(草稿(。product((draft=initialState,action(。