在线大多数教程显示,initialState内部的属性应为”(如果是字符串),例如:
let defaultState = Immutable.fromJS({
viewData: {
id: '',
name: '',
alist: []
}
});
Run Code Online (Sandbox Code Playgroud)
但是,如果您习惯于明确说明某个组件使用什么属性,例如:
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
}),
};
Run Code Online (Sandbox Code Playgroud)
比我将获得“ Failed propType”的唯一方法是是否从reducer中删除了任何属性,并且以isRequired某种方式感到多余,因为它将始终提供一个空字符串,然后将其传递给someContainer子组件。
但是,如果我这样做:
let defaultState = Immutable.fromJS({
data: {
id: null,
name: null,
aList: null
}
});
Run Code Online (Sandbox Code Playgroud)
如果减速器不填充状态,那么我将获得失败的原型,这是不是想要的?但是,由于我很少看到其他人将道具设置为null,所以我觉得有充分的理由不这么做。
另外,使用null方法将Maps嵌套在状态中会造成混乱,因为它甚至比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
}
}
});
Run Code Online (Sandbox Code Playgroud)
null 是默认状态的一种完全可以接受的形式-它是一个赋值,表示此特定属性没有值。
有一个更大的问题在起作用,它完全取决于您的特定应用程序(只有您可以回答才可以null),但是要回答您的特定问题“还可以”-是的,可以。
我不喜欢使用空字符串作为默认状态,我发现它会误导应用程序。例如,我的消耗组件“理解”一个null值意味着尚未提供一个值,而一个空字符串表示确实已设置了一个值,但是它只是空的(例如,没有中间名的用户-该值是“”)。这使应用程序可以更适当地处理应用程序的当前状态。
顺便说一句-这是一个非常出色的问题,在教程中(如您所提到的)通常不会明确探讨。
| 归档时间: |
|
| 查看次数: |
463 次 |
| 最近记录: |