【发布时间】:2019-01-21 22:25:06
【问题描述】:
这个问题可能已经被问过几次了,但我还没有找到我的解决方案。
我有一个应用程序可以保存每天的条目,想象一下日记。处理条目的 reducer 的结构如下:
const initial_state = {}
{
year: {
month: {
day: {
entry: entryValue
}
}
}
}
每当我想在某一天更新现有条目时,我都会这样做:
return {
...state,
[payload.date.year]: {
...state[payload.date.year],
[payload.date.month]: {
...state[payload.date.year][payload.date.month],
[payload.date.day]: payload.data
}
}
};
问题是,如果用户第一次上传条目,我会收到错误,因为
...state[payload.date.year][payload.date.month],
这会抛出一个错误,说无法从未定义中读取 1(例如在一月份)(因为没有年份,即它只是一个空对象,如 initial_state 中的)。
这让我不得不编写逻辑来处理要采取的行动。我必须先检查是否有条目,然后发送正确的操作。因此,例如,如果它是第一个条目,我会发送这样的操作:
return {
[payload.date.year]: {
[payload.date.month]: {
[payload.date.day]: payload.data
}
}
};
我的问题是:有什么方法可以编写 reducer,而不必检查是否存在深层嵌套的键值对?例如检查给定年份是否有条目?
更具体地说,有什么方法可以使它不产生错误:
...state[payload.date.year][payload.date.month],
如果payload.date.year在该州不存在?
【问题讨论】:
标签: redux react-redux