У меня есть быстрый вопрос о reactjs, на который, надеюсь, кто-нибудь сможет ответить. Давайте будем краткими и милыми.
Имею недвижимость в состоянии:
this.state = {
property: []
}
Это свойство представляет собой массив. Я хотел бы изменить одно из свойств внутри массива:
this.setState({
property:{
index: value,
}
});
У меня есть 'index' переданный как переменная в мою функцию изменения состояния. Индекс - это число. Значение индекса будет чем-то вроде «0», «1», «2» ... и т. д. Выполнение того, что я сделал выше, установит значение свойства index, которое мне не нужно. Как мне вместо этого изменить значение свойства, имя которого хранится в переменной index?





Думаю, вы ищете что-то вроде этого:
const index = 'dummy'
const value = 69
this.setState({
property:{
[index]: value,
}
});
// after the state updated
console.info(this.state.property.dummy); // 66
Свойство в состоянии - это массив, но это массив объектов, так что это действительно работает.
@FlamePrinz О, тогда моя ошибка
Не изменяйте напрямую ничего в this.state. Вы должны позволить React обрабатывать это, поэтому сделайте мелкую копию и манипулируйте этим.
const newProperty = [...this.state.property];
newProperty[index] = value;
this.setState({property: newProperty});
Если вы хотите использовать ES5 для создания копии, сделайте это:
const newProperty = this.state.property.slice();
Вы создаете копию, предполагая, что index - это позиция, в которой вы хотите, чтобы произошло изменение, а value - это новое значение, которое вы можете использовать
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)
});
Я не думаю, что это то, что он / она ищет. Это массив, а не объект.