我有一个状态变量在反应为:
1024
和一个动态数组,其值可以包含一个或所有这些值
this.state = {
formStatus : {
approved : true,
rejected : true,
pending : true
}
}
现在,如果阵列中不包含状态键,我想将状态键设置为false。
例如,如果数组为appliedFilters = ['approved', 'rejected', 'pending']
,则我的状态应设置为:
['approved', 'rejected']
如果可能的话,我想使用 ES6 map()来实现。
我已经做了类似的事情,但是没有用:
this.state = {
formStatus : {
approved : true,
rejected : true,
pending : false
}
}
答案 0 :(得分:3)
您不能使用地图构建对象。而且您不想要forEach
,因为这里不需要突变。地图在(和返回)集合上工作。您应该使用reduce
。
const appliedFilters = ['approved', 'rejected']
const state = ['approved', 'rejected', 'pending'].reduce((newState, item) => ({
...newState,
[item]: appliedFilters.includes(item)
}), {});
this.setState(state);
答案 1 :(得分:1)
不可能Array.prototype.map
,因为map
函数返回新的Array()。...
尝试执行此操作。
const allFilters = ['approved', 'rejected', 'pending'];
const appliedFilters = ['approved', 'rejected'];
const newState = {};
allFilters.forEach(filter => {
newState[filter] = appliedFilters.includes(filter);
});
// use!!!
newState;
答案 2 :(得分:1)
.map
上致电prevState.formStatus
。这是一个对象,而不是数组。this.setState
的每次迭代中调用.map
。 您可以考虑简单地这样做:
this.setState(prevState => ({
formStatus: Object
.keys(prevState.formStatus)
.reduce((acc, stat) => ({ ...acc, [stat]: appliedFilters.includes(stat) }), {})
}))