Mel*_*a94 2 javascript ecmascript-6 reactjs
我想使用索引更新数组值,下面的代码可以吗?
handleChange = index => e => {
const { rocket } = this.state // ['tesla', 'apple', 'google']
rocket[index] = e.target.value
this.setState({ rocket })
}
Run Code Online (Sandbox Code Playgroud)
我的jsx
<div>{rocket.map((val,i) => <input type="text" onChange={handleChange(i)} value={val} />)}</div>
Run Code Online (Sandbox Code Playgroud)
我知道它有效,但只是为了确保可以像这样改变状态。
以这种方式改变状态是不行的。
下面的行会改变当前状态下的数组,这种方式可能会导致程序中出现错误,尤其是使用该状态的组件树中的组件。
这是因为状态仍然是相同的数组。
rocket[index] = e.target.value
//console.log(this.state.rocket) and you see that state is updated in place
Run Code Online (Sandbox Code Playgroud)
始终将状态视为不可变
您可以通过写作来解决这个问题。
const newRocket = [
...rocket.slice(0, index),
e.target.value,
...rocket.slice(index + 1)
]
Run Code Online (Sandbox Code Playgroud)
这样,当 React 进行协调时,就会创建一个新数组,并且可以更新组件树中的组件。
请注意,
改变状态的唯一方法应该是通过调用Component.setState.
现在您有了一个新数组,您可以像这样更新组件状态:
this.setState({ rocket: newRocket })
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13339 次 |
| 最近记录: |