javascript / redux:获取状态时如何避免null?

时间:2017-08-04 13:34:33

标签: 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, 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中管理它?或者有更好的方法来在减速机中管理它吗?

编辑:

我应该澄清一点,我并不是要照顾statenull的情况。我正在努力处理这样一种情况:在获取状态时,如果状态为设为null

1 个答案:

答案 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', {});