javascript - 为什么 slice() 在函数中使用时会改变状态

标签 javascript reactjs

我有以下函数,在开始处列出=[]:

handleAddList(s) {

   var temp = this.state.lists.slice();
   temp.push(s);
   console.log(temp);
   this.setState({lists: temp},console.log(this.state.lists) ); 
}

为什么第一个console.log返回s的值,而第二个console.log返回[]?

另外,为什么如果我删除 slice() 现在两个 console.log 都会显示 s 的值?

最佳答案

第二个控制台日志返回 [],因为它尚未设置,因为对 setState 的调用是异步的。

当您删除 .slice() 时,您将创建对 this.state.lists 的引用并直接更改它,这不是异步的,因此它会立即发生。但是,绝对不应该直接改变状态。

相反,继续使用 .slice() 克隆您的状态,然后根据需要改变克隆和 setState。当您需要查看状态时,您应该使用 react-devtools .

关于javascript - 为什么 slice() 在函数中使用时会改变状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47541523/

相关文章:

javascript - YouTube流媒体

javascript - react-redux Provider 在 IE 10/11 中给出错误 “onlyChild must be passed a children with exactly one child”

javascript - 粘性导航 - 位置固定时宽度改变

javascript - 检查 props 是否包含字符串或 SVG

html - 如何在 HTML 标记中显示函数值并通过 addEventListener 单击返回值?

javascript - 使用路由器通过路径 react 传递参数并且无法正确呈现

javascript - PHP中的JSON数组解析并在数据库中更新

javascript - 如何在angularjs中访问被点击元素的内容

javascript - 在 IE9 中解析 xml/json 响应

javascript - Backbone SPA : Best practice for loading new routes?