javascript/redux:获取状态时如何避免null?
假设我有一个这样的减速器:javascript/redux:获取状态时如何避免null?,javascript,redux,Javascript,Redux,假设我有一个这样的减速器: export const fetchStuff = (state, action) => { const s = state || someDefaultState switch (action.type) { case FETCH_STUFF: return {...s, isFetching: true} case SET_STUFF: return {...s
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,然后还必须手动处理组件中某处的null字段
const component = ({ prop }) => {
return {
<div>
<span>{prop.testnull ? '' : prop.testnull}</span>
<div
}
}
const mapStateToProps = (state) => {
const p = prop || someDefaultProp
return {
prop: state.prop
}
}
const组件=({prop})=>{
返回{
{prop.testnull?'':prop.testnull}
{
常数p=prop | | someDefaultProp
返回{
道具:state.prop
}
}
在本例中,这似乎很容易,但我发现管理更大的组件/组件集是一件痛苦的事情。这样做的惯用方法是什么?我必须咬紧牙关,在组件和MapStateTrops
中管理它吗?还是有更好的方法在reducer中管理它
编辑:
我应该澄清一下,我并不是在试图处理
状态
为空
的情况,而是在获取状态时,如果状态设置为空,那么一些属性就会被设置为空,我们已经使用了一些类似的解决方案,并且发现这是一种很好的方法来处理这个用例ucers.Lodash的\uU3.get
是一个很好的解决方案,可以为减速器中的多级get提供默认值:
获取(对象,路径,[defaultValue])
对象
:要查询的对象(对象)
path
:要获取的属性的路径(数组|字符串)
[defaultValue]
:为(*)
解析值返回的值未定义的
const testValue=get(操作,'values.test',{});
const s=state | | someDefaultState您没有使用const s,而是使用可以为null的state,这是一个(现已修复)在我的示例中输入错误,但问题仍然存在,即使它是正确的…您可以为stuff
定义默认值,而不是将null传递给action.values
,在将其设置为默认值之前检查它是否为null。例如:返回{…s,isFetching:false,stuff:action.values?action.values:[]}