用数组反应本机setState

时间:2018-08-01 09:01:48

标签: javascript arrays reactjs react-native state

有没有一种方法可以用数组设置状态?

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})

如何使用数组设置状态?

2 个答案:

答案 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] }

相关问题