简体   繁体   English

通过在 js/react 中的函数中传递参数来实现目标数组

[英]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许多子级都是数组,比如colorsyears ,我称之为“子组”。 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 ,功能中的所有变化都是colorsyears 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM