javascript - 替换状态中的数组元素(整数)

标签 javascript reactjs immutability

我在 React 的 state 中有一个简单的数组,仅包含整数:

this.state = {
  myArray: [1,2,3]
}

我正在尝试以不可变的方式替换值(值 2 应替换为 8):

const valueToReplace = 2
const newValue = 8
const myArray = this.state.myArray
const arrayPosition = myArray.indexOf(valueToReplace)
const newArray = Object.assign([], myArray, {arrayPosition: newValue})

this.setState({myArray: newArray})

但我的方式不会改变 myArray 的状态。我认为我没有以正确的方式使用Object.assign

最佳答案

您可以使用Array.prototype.slice复制数组,改变你的副本,然后分配它。由于您是创建一个新数组而不是修改现有数组,因此您仍然可以避免突变问题。

const valueToReplace = 2
const newValue = 8
const newArray = this.state.myArray.slice() // copy
const arrayPosition = newArray.indexOf(valueToReplace)
newArray[arrayPosition] = newValue

this.setState({myArray: newArray})

关于javascript - 替换状态中的数组元素(整数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43902449/

相关文章:

JavaScript 函数未触发

javascript - 注意到上下文属性与我的配置一起传递给 webpack。它从何而来?

javascript - 使用 webpack 加载器时“找不到模块”

java - 最终的、不可变的对象不是常量吗?

java - 如何在 Kotlin 中创建一个在 Java 中也是不可变列表的不可变列表?

javascript - Mouseup 事件与可见性切换冲突

javascript - 使用关键帧在屏幕上移动元素并返回

ajax - React Storybook 组件 Ajax 请求如何

node.js - Amazon Cognito 确认密码失败并显示 (TypeError : Converting circular structure to JSON)

Java 不可变对象(immutable对象)