如何在反应中修复状态更新?

Posted

技术标签:

【中文标题】如何在反应中修复状态更新?【英文标题】:How to fix state updating in react? 【发布时间】:2022-01-16 15:47:41 【问题描述】:

我使用little state machine 进行状态管理。我有以下状态

export const todoState =  todoList: []   

现在我使用动作类似的动作来调用它

export const updateTodoList = (state, payload) => 
    return 
        ...state,
        toDoList: 
            ...state.toDoList,
            ...payload
        
    

调用此操作

 updateToDoList( id: '1', text:'11', isComplete: 'false )

但动作仍然不会更新 toDoList 的数组,也不会考虑以前的值。

任何人都可以帮助我更新操作代码吗?谢谢。

【问题讨论】:

错字,toDoListtodoList。您将状态声明为 todoList 并将属性更新为 toDoList 是的,但是在动作逻辑中,有什么问题吗? todoList 是数组而不是对象 是的,如果我从那里删除了 ,那么它会显示 react-dom.development.js:4091 Uncaught TypeError: payload is not iterable 动作函数中的状态对象是什么样的? console.log(state) 在 return 语句之前。了解对象的确切结构是如何操作它的关键。 【参考方案1】:

1) 打字错误:todoList 而不是 toDoList

2) todoList 是一个数组而不是一个对象。所以把它展开成一个数组。

3)既然你传递的是一个对象,所以不需要传播它

export const updateTodoList = (state, payload) => 
  return 
    ...state,
    todoList: [
      ...state.todoList,
      payload,        // It will add the payload object into todoList
    ],
  ;
;

【讨论】:

嘿@decpk 谢谢你。不知道为什么现在说 state.todoList 不可迭代 只是想更新一下,我已经声明了类似 export const todoList = todoList: [] 的状态

以上是关于如何在反应中修复状态更新?的主要内容,如果未能解决你的问题,请参考以下文章

我如何在反应中取消订阅

我们如何在反应中部分更新状态?

如何修复“反应:预期分配或函数调用,而是看到一个表达式”(状态分配)?

如何在一个 submitHandler 中两次更新反应状态

更新反应脚本后如何修复主页上的重大更改(创建反应应用程序)

如何正确更新反应钩子状态中的数组