Javascript 状态对象的渲染问题
我正在使用React挂钩,在呈现状态时遇到问题。因此,我的状态如下所示Javascript 状态对象的渲染问题,javascript,reactjs,redux,react-hooks,Javascript,Reactjs,Redux,React Hooks,我正在使用React挂钩,在呈现状态时遇到问题。因此,我的状态如下所示 const [task, setTask] = useState({ id: 0, taskName: "", timeField: 0 }); 在我的减速机里,我有 const initialState = { tasks: [] }; const tasksR = (state = initialState, action) => { switch (action.type) {
const [task, setTask] = useState({ id: 0, taskName: "", timeField: 0 });
在我的减速机里,我有
const initialState = {
tasks: []
};
const tasksR = (state = initialState, action) => {
switch (action.type) {
case "SAVE_TASK": {
//return [...state, action.payload];
return {
...state,
tasks: [...state.tasks, action.payload]
};
}
default:
return state;
}
};
但是,我无法在UI上呈现状态
另外,我还有一个问题,对于初始状态,如果我们只设置减速器,可以吗?
我还看到它在createStore()中传递/设置,如下所示
const defaultState = { tasks: [] };
const store = createStore(
rootReducer,
defaultState,
window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__()
);
window.store = store;
Not sute为什么除了减速器之外,还在此处设置默认状态
我的完整代码示例位于
实际上,您的店铺看起来是这样的:
{
tasks: {
tasks: []
}
}
const initialState = [];
const tasksR = (state = initialState, action) => {
switch (action.type) {
case "SAVE_TASK": {
return [...state, action.payload];
}
default:
return state;
}
};
export default combineReducers({tasks: tasksR});
这就是为什么if(Array.isArray(props.tasks)){
中的代码永远不会执行,因为props.tasks
(与state.tasks
相同)是一个对象
您可以使用props.tasks.tasks
获取任务数组,也可以像这样更新存储:
{
tasks: {
tasks: []
}
}
const initialState = [];
const tasksR = (state = initialState, action) => {
switch (action.type) {
case "SAVE_TASK": {
return [...state, action.payload];
}
default:
return state;
}
};
export default combineReducers({tasks: tasksR});
嘿…非常感谢…尝试在reducer中更新…但是,现在看到此错误…传播不可iterable实例的尝试无效。为了使不可iterable,非数组对象必须具有[Symbol.iterator]()方法。您需要迭代state.tasks.tasks而不是state.tasks….state.tasks.tasksorry…我也必须将其更新为const initialState=[];现在似乎正在工作我的问题是-是否“总体状态”实际上仍然是一个对象,但const initialState=[]只对应于一个子状态…所有单个的还原器最终组合为“整体状态”…这是否正确?这正是
combinereducer
所做的。它实际上将所有单个还原器组合为一个全局还原器。cont initialState=[]
实际上是任务的初始状态
子状态您应该将timerId
存储在ref
中,否则计时器id在重新加载之间丢失。