[英]target array by passing argument in function in js/react
I have an object to collect data to send to an API:我有一个对象来收集要发送到 API 的数据:
apiData: {
colors: [],
years: [],
// ..
}
Many of the children of this apiData
are arrays like colors
and years
, I call these 'subgroups'.这个
apiData
许多子级都是数组,比如colors
和years
,我称之为“子组”。 A user can select a multitude of subgroups with checkboxes that trigger:用户可以选择多个带有触发复选框的子组:
handleCheckboxColorChange(value, isChecked) {
let newApiData = '';
this.setState( (prevState) => {
if (isChecked === true) {
newApiData = {...prevState.apiData, colors: [...prevState.apiData.colors, value]}
} else {
newApiData = {...prevState.apiData, colors: [...prevState.apiData.colors.filter(item => item !== value)]
}
}
return {apiData: newApiData}
}, () => this.props.handleApiCall(this.state.apiData))
}
I use a similar function for the other 'subgroups'.我对其他“子组”使用了类似的功能。 For
years
, all that changes in the function is colors
to years
. years
,功能中的所有变化都是colors
到years
。 So I wish to create a more general function that can take a 'subgroup' as argument to target the right array in my object.所以我希望创建一个更通用的函数,它可以将“子组”作为参数来定位对象中的正确数组。 I tried to pass a third variable (a string)
subGroup
like so:我试图传递第三个变量(字符串)
subGroup
如下所示:
handleCheckboxChange(value, isChecked, subGroup) {
// ..
newApiData = {...prevState.apiData, subGroup: [...prevState.apiData.subGroup, value]}
This does not work (I guess because it is now looking for the child 'subgroup' in my object).这不起作用(我猜是因为它现在正在我的对象中寻找子“子组”)。 How can I make this work?
我怎样才能使这项工作?
Use bracket notation :使用括号表示法:
handleCheckboxChange(value, isChecked, subGroup) {
// ..
newApiData = {...prevState.apiData, [subGroup]: [...prevState.apiData[subGroup], value]}
To make it a bit prettier, you can use this:为了让它更漂亮一点,你可以使用这个:
handleCheckboxColorChange(value, isChecked, subGroup) {
this.setState((prevState) => {
const newState = { ...prevState }
newState[subGroup] = isChecked ? [ ...newState[subGroup], value ] : newState[subGroup].filter(item => item !== value)
return newState
}, () => this.props.handleApiCall(this.state.apiData))
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.