如何在名称为变量值的状态中更改属性?

时间:2018-03-28 17:17:51

标签: reactjs

我有一个关于reactjs的快速问题,希望有人可以回答。让它保持简短和甜美。

我有一个州的财产:

    this.state = {
        property: []
    }

此属性是一个数组。我想更改数组中的一个属性:

    this.setState({
        property:{
            index: value,
        }
    });

我有索引'作为变量传递到我的状态更改函数。索引是一个数字。索引的值将是诸如' 0',' 1',' 2' ......等等。 做我上面做的将设置属性' index'的值。这不是我想要的。我该如何改变名称存储在变量' index'?

中的属性的值?

3 个答案:

答案 0 :(得分:2)

您创建一个副本,假设索引是您希望更改发生的位置,而值是您可以使用此值的新值

this.setState({
        property: this.state.property.map((anItem, i) => (i === index) ? value : anItem) 
    });

如果您的真实状态恰好有更多属性,那么您需要使用此

this.setState({
        ...this.state,
        property: this.state.property.map((anItem, i) => (i === index) ? value : anItem) 
    });

答案 1 :(得分:1)

我认为你正在寻找这样的东西:

const index = 'dummy'
const value = 69
this.setState({
    property:{
        [index]: value,
    }
});

// after the state updated 
console.log(this.state.property.dummy); // 66

答案 2 :(得分:1)

不要直接改变this.state中的任何内容。你应该让React处理它,所以做一个浅的副本并操纵它。

const newProperty = [...this.state.property];
newProperty[index] = value;
this.setState({property: newProperty});

如果您想使用ES5制作副本,请改为:

const newProperty = this.state.property.slice();