defaultState中的属性应该为null还是''

时间:2017-02-14 13:52:13

标签: reactjs redux

大多数在线教程都表明,initialState中的属性应该是'' (如果是字符串),如:

let defaultState = Immutable.fromJS({
    viewData: {
        id: '',
        name: '',
        alist: []
    }
});

但是,如果您有习惯明确说明某个组件使用的属性,例如:

function mapStateToProps(state) {
    return viewData: state.someReducer.get('data');
}

someContainer.propTypes = {
    data: ImmutablePropTypes.mapContains({
        id: React.PropTypes.string.isRequired,
        name: React.PropTypes.string.isRequired,
        aList: ImmutablePropTypes.list.isRequired
    }),
};

比我得到的唯一方法" propType"如果从reducer中删除了任何属性,并且isRequired感觉多余,因为它总是会给出一个空字符串,而不是传递给someContainer子组件。

但是,如果我这样做:

let defaultState = Immutable.fromJS({
    data: {
        id: null,
        name: null,
        aList: null
    }
});

如果减速器没有填充状态,我会得到一个失败的proptype,不是这个吗?然而,由于我很少看到其他人将道具设置为null,我觉得有充分的理由不这样做。

另外,使用null方法嵌套映射状态会让人感到困惑,因为它甚至比viewData都应该为null,但是你丢失了信息而没有显示它真正得到的数据:

let defaultState = Immutable.fromJS({
    viewData: { // Shouldnt this be null than as well?
        id: null,
        name: null,
        hierarchies: { // and this
            one: null,
            two: null
        }
    }
});

1 个答案:

答案 0 :(得分:4)

null是一种完全可以接受的默认状态形式 - 它是一个赋值,表示此特定属性没有值。

有一个更大的问题在起作用,这完全取决于你的特定应用(只有你可以在null有意义时回答),但要回答你关于它“正常”的特定问题 - 是的,它是好。

我不喜欢使用空字符串作为默认状态,我发现它误导了应用程序。例如,我的消费组件“理解”null值表示要提供的值 ,而空字符串表示确实设置了一个,但它只是空的(比方说,没有中间名的用户 - 值是“”)。这允许应用程序更适当地处理应用程序的当前状态。

顺便说一句 - 这是一个非常优秀的问题,在教程中并没有经常明确地探讨过(正如你所提到的)。