【发布时间】:2021-08-11 08:26:10
【问题描述】:
Redux,“删除对象”在嵌套对象中无法正常工作。我只是想删除键“0”中的键“b”。我只能删除键“0”,但是当我尝试删除“0”中的嵌套键“b”时,它不起作用。如果您知道如何解决它,请告诉我!
代码:
export function removeOrder(key1, key2) {
return {
type: 'REMOVE_ORDER',
payload: {key1: key1, key2: key2},
};
}
var initialState = {
0: {
a: {
title: 'aa',
},
b: {
title: 'bb',
},
c: {
title: 'cc',
},
},
1: {
a: {
title: 'aa',
},
b: {
title: 'bb',
},
c: {
title: 'cc',
},
},
};
function ordersReducer(state = initialState, action) {
switch (action.type) {
case 'REMOVE_ORDER':
const id1 = action.payload.id1;
const id2 = action.payload.id2;
// Working
//delete state[id1];
// Not working
delete state[id1][id2];
return state;
default:
return state;
}
}
removeOrder(0, 'a');
预期结果:
{
0: {
b: {
title: 'bb',
},
c: {
title: 'cc',
},
},
1: {
a: {
title: 'aa',
},
b: {
title: 'bb',
},
c: {
title: 'cc',
},
},
};
【问题讨论】:
-
一旦你有了
delete state[id1],它就不能存在给你delete state[id1][id2]- 删除内部对象然后删除外部对象绝对没有意义,因为你正在删除外部对象反正 -
我的意思是如果我只使用“delete state[id1][id2]”而不使用“delete state[id1]”,它不会删除嵌套对象。
-
也许您的意思是
const id1 = action.payload.key1; const id2 = action.payload.key2;,因为这就是动作对象的样子?或者可能是payload: {id1: key1, id2: key2},,因为这是函数所期望的?看起来像一个简单的错字 - 注意delete obj[undefined]不会抛出错误 - 这就是为什么delete state[id1];没有抛出错误,即使它什么也没做
标签: javascript reactjs react-native redux