2017-03-05 114 views
3

设置初始状态,我已存储的用户名,全名&电子邮件地址终极版商店。我有一个需要电子邮件地址的组件,因此它可以进行API调用以获取用户组信息(使用域 - 即[email protected]成为使用gmail.com进行数据库查询的关键)。该组件连接到商店并使用mapStateToProps获取状态信息。从终极版

它是一个反模式做这样的事情在this.stat = {}

this.state = { 
    group: '', 
    owner: this.props.user.id, 
    domain: this.props.user.email.split('@')[1], 
    errors: {}, 
} 

感谢您的所有建议。

+0

不是一个好主意。直接在render方法中使用redux状态。 –

回答

5

它不是很好的做法,在本地状态复制终极版状态。

为什么?因为它不可扩展。想象一下,如果你的数据将需要改变。所以你需要更新你的本地状态和redux状态。而且,如果你的redux状态会改变 - 你需要更新本地状态。它会变成意大利面。


你可以做什么?

您可以将只使用从道具您的数据。实施shouldComponentUpdate方法以确保您的数据始终保持最新状态。

shouldComponentUpdate(nextProps, nextState) { 
    return this.props.user !== nextProps.user 
} 

并使用道具中的数据。

+0

再次感谢@DmitriyKovalenko –

-1

我喜欢根据我的经验法则来使用它们。

如果你需要的数据是特定于实例 - use state。 例如:您有一个按钮组组件,由于存在多次使用该组件的可能性,因此请将数据保持在状态。

如果您的数据需要是全球性的,所以任何人都可以从任何其他组件修改它,特别是如果你想要的数据到外部源被捆绑,用终极版状态。由于数据是组件外部的,因此管理它变得非常简单。

链接:https://github.com/reactjs/redux/issues/1287

+1

“总是建议使用Redux而不是React的内部状态”。不,它不是。相反应该是真的。如果你正在存储那个组件的内部状态,那么它们没有理由使其成为全局组件。就像你在JS中有全局和私有变量一样,如果你可以让它变为私有的,你可以这样做。 –

+0

这是我从很多讨论中推断出的,我读过的。但那些仍然是意见,所以我的开场白是错误的。编辑答案。 –