2017-02-14 173 views
2

大多数教程在线表明里面的初始化状态的属性应该是“”(如果它是一个字符串),如:如果里面defaultState属性为空或“”

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”是,如果任何属性得到了来自减速删除,isRequired莫名其妙的感觉多余的,因为唯一的出路它会一直给出一个空字符串而不是传递给someContainer子组件。

但是,如果我做的:

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

比我会得到一个失败的proptype如果减速,没有填充状态,心不是这样想?然而,因为我很少看到其他人将道具设置为空,我觉得有一个很好的理由不会。因为它

而且,与空法状态嵌套地图吃不了混乱,甚至比可视数据为空,但你失去了与没有显示它真的会得到什么样的数据信息:

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

回答

2

null是一种完全可以接受的默认状态 - 它的赋值指示这个特定的属性没有价值。

在游戏中有一个更大的问题,完全取决于您的特定应用程序(只有您可以回答,如果null有意义),但要回答您关于“确定”的特定问题 - 是的,没关系。

我不喜欢使用空字符串作为默认状态,我觉得很误导的应用程序。例如,我的消耗部件,“理解”,一个null值意味着值尚未来提供,而一个空字符串意味着一个确实已经确定,但它仅仅是空的(可以说,没有一个中间名用户 - 值是“”)。这允许应用程序更适当地处理应用程序的当前状态。

顺便说一句 - 它是一个非常好的问题不经常明确教程探索(你提到)。

+0

我喜欢你的说法 - “一个空值表示值尚未提供,而一个空字符串意味着一个确实已经确定,但它仅仅是空的”,这让很多道理。但是,当我尝试了更多,也就是给我的整个状态空我跑与地图和性能问题,这些地图 – user3711421

+0

我想你实际上是在问两个问题里 - 那是正确的,我怎么会接近与immutablejs。如前所述,它确实意味着你的应用程序需要理解null和empty之间的区别(这是一件好事,因为它应该理解这个区别) - 你可能需要在那里进行一些空的检查。 – Chris

+0

我想我是。我认为你所说的话有很大的意义,但为什么没有教程制定者这样做?像丹阿布拉莫夫和泰勒mccginnis谁是在反应/ Redux的社区比较大的.....还有看到我更新的代码:) .. – user3711421

相关问题