Как я могу динамически установить имя массива в состоянии, чтобы получить его из состояния.
onCheckBoxItemClickList(e, value, path) {
console.info(e.target.checked)
if (e.target.checked) {
//append to array
this.setState({
[path]: this.state.[path].concat([value])
})
} else {
//remove from array
this.setState({
[path]: this.state.[path].filter(function (val) {
return val !== value
})
})
}
}
Я знаю, как динамически устанавливать и получать ключ в состоянии, но когда я попробуй и сделай
[path]: this.state.[path].concat([value])
Я получаю следующую ошибку:
Любая помощь будет принята с благодарностью, Спасибо



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


В вашем коде есть дополнительная точка (после состояния):
[path]: this.state.[path].concat([value])
Должно быть:
[path]: this.state[path].concat([value])
Затем всякий раз, когда вы хотите установить состояние на основе предыдущего состояния, вы должны использовать setState, который принимает обратный вызов, с prevState в качестве аргумента.
Итак, ваш код должен выглядеть примерно так:
onCheckBoxItemClickList(e, value, path) {
console.info(e.target.checked)
if (e.target.checked) {
//append to array
this.setState(prevState => ({
[path]: prevState[path].concat([value])
}))
} else {
//remove from array
this.setState(prevState => ({
[path]: prevState[path].filter(function (val) {
return val !== value
})
}))
}
}
Ура, большое спасибо. Немного сбивает с толку тот факт, что если вы хотите указать имя массива / ключ состояния (не динамически), для этого заранее требуется точка, но для динамического выполнения точка не требуется. Этот ответ stackoverflow.com/a/43985409/2208342 о переполнении стека сделал состояние более ясным для меня и показал, что состояние является объектом.