reactjs - 如何在不改变状态本身的情况下获取状态值并对其进行操作?
问题描述
我正在开发一个带有本机反应的应用程序。我在状态(lettersPosition)中有一个对象数组,我想在函数内的变量中对其进行时间排序(但我不希望对状态本身进行排序):
verifyWord = () => {
const array = this.state.lettersPosition;
array.sort(function (a, b) {
return a.x - b.x;
});
var word = "";
array.map(function (char) {
word += char.letter
})
}
我对其进行了测试,看来我的状态本身在排序后已更新(即使我在临时数组上调用了排序函数)。
就像“数组”变量包含对状态的整个引用而不仅仅是它的值。如果我修改该变量,它也会修改状态。
这是反应的正常行为吗?
如何在不改变状态本身的情况下获取状态的值并对其进行操作?
谢谢
解决方案
尝试使用var newArray = oldArray.slice();
而不是 const array = this.state.lettersPosition;
在您的代码中,您没有创建数组的副本,您只是将其分配给另一个变量。
有关更多信息,请参阅按值复制数组var newArray = oldArray.slice();
。
推荐阅读
- javascript - 反应日期选择器禁用手动输入日期
- drools - Optaplanner - 部署项目时无法编译drools文件
- javascript - 如果 OF 元素中组的长度大于零,则检查对象数组
- javascript - 使用 Node.js 托管在 Heroku 上的机器人无法添加到 .txt 或 json 文件
- reactjs - React 中样式化组件的可重用性
- servicestack - 查询没有布尔值的参数
- flutter - 根据 Flutter 性能检查器,Flutter TextFormField 验证通过创建无限小部件来创建内存泄漏
- python - Bazel 构建 /usr/bin/ld:找不到 -ltensorflow_framework
- node.js - 顶级等待在构建中给出错误,但在开发中有效
- php - 与谷歌的身份验证它不起作用它重定向到 404 未找到