有没有一种方法可以用数组设置状态?
this.state={
numberOne:'',
numberTwo:'',
numberThree:'',
}
this.setState({numberOne:1})
this.setState({numberTwo:2})
this.setState({numberThree:3})
上面的代码可以工作,但是下面的代码不能工作。
this.state={
numbers:['','','']
}
this.setState({numbers[0]:0})
this.setState({numbers[1]:1})
this.setState({numbers[1]:1})
如何使用数组设置状态?
答案 0 :(得分:1)
您可以执行以下操作:
int
或者,如果您要编辑特定的数组索引,则必须在不改变状态的情况下创建该数组的新副本:
this.setState({ numbers: [1, 2, 3] })
请记住,根据数组值的类型,可以通过值或引用进行复制。
对于const copied = [...this.state.numbers]
copied[0] = 1
this.setState({ numbers: copied })
数组值,它是通过值(深度复制)完成的,并且对复制的数组值进行突变不会影响原点的值。因此,如果您的情况如此-那么您就不必担心。
对于booleans, strings, numbers
数组值-复制是通过引用完成的(浅复制),并且您必须注意不要偶然更改原始数组。您可以阅读有关数组复制here的更多信息。
简而言之:无论采用哪种方法,请始终确保不要变异原点(状态)数组。
答案 1 :(得分:0)
该语法没有意义。而且您不能直接更改状态。要更改单个数组元素或对象属性,您需要首先复制该状态属性,修改该值,然后替换整个属性。例如:
// Initial state in constructor
this.state = { numbers: [1,2,3] };
然后将其更改为某个地方:
let newNumbers = this.state.numbers.slice(0); // makes copy of the array
newNumbers[1] = 5;
this.setState({numbers: newNumbers});
,然后您将声明为{ numbers: [1,5,3] }