Javascript 状态对象的渲染问题

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) {

我正在使用React挂钩,在呈现状态时遇到问题。因此,我的状态如下所示

  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在重新加载之间丢失。