说我有这样的减速机:
export const fetchStuff = (state, action) => {
const s = state || someDefaultState
switch (action.type) {
case FETCH_STUFF:
return {...s, isFetching: true}
case SET_STUFF:
return {...s, isFetching: false, stuff: action.values}
default:
return s
}
}
在这种情况下,如果actions.values
的对象是null
,那么我的组件将很难处理它们,因为我将手动确保组件不会传递null prop然后还需要手动处理组件中的空字段。
const component = ({ prop }) => {
return {
<div>
<span>{prop.testnull ? '' : prop.testnull}</span>
<div
}
}
const mapStateToProps = (state) => {
const p = prop || someDefaultProp
return {
prop: state.prop
}
}
在这个例子中看起来似乎很容易,但我发现管理更大的组件/组件集很痛苦。这样做的惯用方法是什么?我是否必须咬紧牙关并在组件mapStateToProps
中管理它?或者有更好的方法来在减速机中管理它吗?
编辑:
我应该澄清一点,我并不是要照顾state
是null
的情况。我正在努力处理这样一种情况:在获取状态时,如果状态为设为null
答案 0 :(得分:1)
我们已经使用了一些类似的解决方案,并发现这是在我们的Reducer中处理这个用例的一种很好的方法。 Lodash的_.get
是一个很好的解决方案,可以为你的reducer中的多级get提供一个默认值:
https://lodash.com/docs/4.17.4#get
_.get(object, path, [defaultValue])
object
(Object)
:要查询的对象。path
(Array|string)
:要获取的媒体资源的路径。[defaultValue]
(*)
:为undefined
已解决的值返回的值。
例如:
const testValue = get(action, 'values.test', {});