我不确定我在做什么错,但是我无法取消。我正在尝试从redux中的对象中删除一项。试图使用删除,但它破坏了应用程序。我从lodash得到了一个真实的答复,说它已经被删除了,但是当我在它显示相同对象后进行控制台时。
let newState = {...state};
console.log('before', newState);
console.log(_.unset(newState, [`year2020.month${action.month}.days.day${action.day}`]));
console.log('after',newState);
return newState;
采样状态:
let state = {
year2020: {
month3: {
num: 0,
name: "January",
length: 31,
starts: 3,
days: {
day1: { mood: 1 },
day2: { mood: 2 },
day3: { mood: 3 },
day11: { mood: 4 }
}
}
}
};
答案 0 :(得分:1)
由于您的路径是一个字符串(一个用点分隔的字符串),所以不要包装在数组中。
注意:因为您会突变对象的更深层次,所以请使用_.cloneDeep()
而不是浅克隆(扩展):
const state = {"year2020":{"month3":{"num":0,"name":"January","length":31,"starts":3,"days":{"day1":{"mood":1},"day2":{"mood":2},"day3":{"mood":3},"day11":{"mood":4}}}}};
const newState = _.cloneDeep(state);
const action = { payload: { month: 3, day: 1 }};
_.unset(newState, `year2020.month${action.payload.month}.days.day${action.payload.day}`);
console.log('after',newState);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.js"></script>
Lodash / fp与redux配合得很好,因为它不会突变原始对象(在此示例中,路径为数组):
const state = {"year2020":{"month3":{"num":0,"name":"January","length":31,"starts":3,"days":{"day1":{"mood":1},"day2":{"mood":2},"day3":{"mood":3},"day11":{"mood":4}}}}};
const action = { payload: { month: 3, day: 1 }};
const newState = _.unset([
'year2020',
`month${action.payload.month}`,
'days',
`day${action.payload.day}`
], state);
console.log('after',newState);
<script src='https://cdn.jsdelivr.net/g/lodash@4(lodash.min.js+lodash.fp.min.js)'></script>