Javascript 删除设置状态中不工作的三值
因此,我一直在努力使应用程序的这一部分100%正常工作,从以下相关问题可以看出: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) ); } 所以设置是这样的。。。根据特定项目的数据“剪切”数量动态生成一组按钮
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)
);
}