一篇Facebook文章,“反思中的思考”,(我不会因为我忽略它而忽略链接,因为我忽略了发布外部链接的规则)描述了三个主要标准,我们可以用它来确定用户界面应该是有状态的。
这些是标准,或者更好的是,每个数据的问题:
由于文章中没有明确表达,我想知道,如果所有这些问题/要点都得到满足,或者至少其中一个问题/点是,那么在您看来,一条数据是否可以成为该州的一部分满意。
由于 (请原谅我的英语,这不是我的第一语言)
答案 0 :(得分:1)
根据我的经验,这些经验法则是非常理智的 - 如果一条数据满足任何它们,很可能它不是一个州。
以下是我对这些标准的看法:
它是通过道具传递给父母的吗?如果是这样,它可能不是状态。
一个可能的例外(它是一个延伸)是通过props传递状态的默认值:
constructor(props) {
super(props);
this.state = {
value: props.defaultValue || ''
};
}
然而,我认为这是一种不好的做法。这是因为在创建组件的实例后,默认值将被设置为原石。相反,更好的方法是在每次渲染时推导实际值:
constructor(props) {
super(props);
this.state = {
value: ''
};
}
getValue() {
return this.state.value || this.props.defaultValue;
}
它会随着时间的推移而保持不变吗?如果是这样,它可能不是状态。
嗯,根据定义,状态是可以改变的东西。否则,它是一个常数,应该这样对待。
您可以根据组件中的任何其他状态或道具来计算它吗?如果是这样,那就不是状态。
这是一个有趣的问题。将某些计算值保持在该状态可能是诱人的,特别是如果上述计算是昂贵的(例如,对列表进行排序等)。但是,我们正在做的是缓存计算结果,而这不是州的工作。
我对此的看法是重新计算,直到你遇到一些性能问题。发生这种情况时,您可以使用reselect等库。 (N.b。:它说它适用于Redux,但我非常确定它可以在Redux之外使用。)