Javascript 删除设置状态中不工作的三值

Javascript 删除设置状态中不工作的三值,javascript,reactjs,react-redux,Javascript,Reactjs,React Redux,因此,我一直在努力使应用程序的这一部分100%正常工作,从以下相关问题可以看出: onCutSelect(cut) { this.setState( ({cuts: prevCuts}) => ({cuts: {...prevCuts, [cut]: cut}}), () => this.props.bqResults(this.state.cuts) ); } 所以设置是这样的。。。根据特定项目的数据“剪切”数量动态生成一组按钮

因此,我一直在努力使应用程序的这一部分100%正常工作,从以下相关问题可以看出:

onCutSelect(cut) {
    this.setState(
        ({cuts: prevCuts}) => ({cuts: {...prevCuts, [cut]: cut}}),
        () => this.props.bqResults(this.state.cuts)
    );
}

所以设置是这样的。。。根据特定项目的数据“剪切”数量动态生成一组按钮(基本上以不同的方式查看数据,如地理位置、业务部门等)。用户可以一次选择一个按钮,单击全选按钮。这将从服务器检索与切割相关的数据,并在按钮下方生成一个表

一次选择一次有效,选择全部有效,清除全部有效。但是,我现在试图设置的是,如果用户再次单击同一按钮,它将关闭该数据点

这就是我在前面的一个问题后留下的地方:

onCutSelect(cut) {
    this.setState(
        ({cuts: prevCuts}) => ({cuts: {...prevCuts, [cut]: cut}}),
        () => this.props.bqResults(this.state.cuts)
    );
}
一次选择一个选项和全选(通过另一个函数的
map
调用此函数)可以正常工作

对此进行了修改,我希望可以关闭数据点:

onCutSelect(cut) {
    this.setState(
        ({cuts: prevCuts}) => (
            this.state.cuts.hasOwnProperty(cut) 
            ? 
                delete this.state.cuts[cut] 
            : 
                {cuts: {...prevCuts, [cut]: cut}}),
        () => this.props.bqResults(this.state.cuts)
    );
我认为应该发生的是检查
键是否存在,以及是否要删除它,这将关闭按钮。确实如此,它将按钮状态更改为未选中

然而,我认为也应该发生的是,由于正在修改
this.state.cuts
,它将把新的
this.state
发送到
this.props.bqResults
操作。当按钮处于关闭状态时,它仍然显示与切割相关的数据,因此存储不会因任何原因而更新。我应该如何处理这件事

以下是相关代码的其余部分:



有几件事。首先,不要像那样直接改变状态。使用
delete
删除现有
this.state.cuts
的索引号。在分配新值时,以创建全新数组的方式执行此操作。我使用扩展运算符进行此操作

此外,当您返回删除操作时,它不会返回使用
delete
后的数组。它返回
delete
的返回值,在本例中为布尔值

函数delIdx(arr,idx){
返回删除arr[idx]
}

log(delIdx([1,3,4],3))
感谢您的反馈和解释。但是,仍然遇到了这个问题。
delete
部分不工作,状态保持不变。更多地看一看这个问题。你能给我看一下你的
mapDispatchToProps
// results.js reducer
import {
    FILTER_RESULTS
} from '../actions/results';

export default function(state = {}, action) {
    switch(action.type) {
        case FILTER_RESULTS:
            console.log(action.payload); //prints out all the cuts
            return {
                ...state,
                filter_results: action.payload
            }
        default:
            return state;
    }

    return state;
}

const rootReducer = combineReducers({
    results: resultsReducer,
});

export default rootReducer;
onCutSelect(cut) {
  this.setState(
      ({cuts: prevCuts}) => {
        if (cuts.hasOwnProperty(cut)) {
          const newCut = {...this.state.cuts}
          delete newCut[cut]
          return newCut
        } else {
          return {cuts: {...prevCuts, [cut]: cut}}
        }
      },
    () => this.props.bqResults(this.state.cuts)
  );
}