Lew*_*wis 5 javascript ecmascript-6 reactjs
使用 React 时(没有 Redux)。假设我有如下所示的组件状态:
{
rows: [
{
items:[
{
value:'a',
errors: false
},
{
value:'b',
errors: false
},
{
value:'c',
errors: false
}
]
}
Run Code Online (Sandbox Code Playgroud)
还假设行和项目的长度可以是 0 > n。
更新任何项目的价值的最佳(最有效、最常见、最一致、最流行等)方式是什么,即
this.state.rows[0].item[1]
Run Code Online (Sandbox Code Playgroud)
我意识到我可以做到:
let updatedRows = this.state.rows
updatedRows[0].item[1].value = 'new value'
this.setState({
rows: updatedRows
})
Run Code Online (Sandbox Code Playgroud)
这是普遍接受的吗?替换几乎整个状态对象来更改单个值不是效率低下吗?
let updatedRows = this.state.rows
updatedRows[0].item[1].value = 'new value'
Run Code Online (Sandbox Code Playgroud)
因为item[1]是一个对象,改变它value会改变你的状态,因为它引用同一个对象。
你永远不应该直接改变状态,因为当你直接修改状态时,React不会触发相关的生命周期事件。来自文档(https://facebook.github.io/react/docs/react-component.html):
切勿直接改变 this.state,因为之后调用 setState() 可能会替换您所做的改变。将 this.state 视为不可变的。
我喜欢使用immutability-helper库来复制状态中的对象。例如将valueof更改this.state.rows[0].item[1]为z:
this.setState({rows: update(this.state.rows,
{ 0: { item: { 1: { value: { $set: 'z' } } } } }
)});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2290 次 |
| 最近记录: |