大多数在线教程都表明,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
}
}
});
答案 0 :(得分:4)
null
是一种完全可以接受的默认状态形式 - 它是一个赋值,表示此特定属性没有值。
有一个更大的问题在起作用,这完全取决于你的特定应用(只有你可以在null
有意义时回答),但要回答你关于它“正常”的特定问题 - 是的,它是好。
我不喜欢使用空字符串作为默认状态,我发现它误导了应用程序。例如,我的消费组件“理解”null
值表示要提供的值 ,而空字符串表示确实设置了一个,但它只是空的(比方说,没有中间名的用户 - 值是“”)。这允许应用程序更适当地处理应用程序的当前状态。
顺便说一句 - 这是一个非常优秀的问题,在教程中并没有经常明确地探讨过(正如你所提到的)。