用于识别UI状态的最小表示的Facebook标准:我们是否需要所有这些或仅仅一个就足够了?

时间:2018-01-08 23:10:48

标签: reactjs

一篇Facebook文章,“反思中的思考”,(我不会因为我忽略它而忽略链接,因为我忽略了发布外部链接的规则)描述了三个主要标准,我们可以用它来确定用户界面应该是有状态的。

这些是标准,或者更好的是,每个数据的问题:

  1. 是通过道具从父母那里传来的吗?如果是这样,可能不是 州。
  2. 它会随着时间的推移而保持不变吗?如果是这样,可能不是 州。
  3. 你可以根据你的任何其他状态或道具计算它 零件?如果是这样,那就不是状态。
  4. 由于文章中没有明确表达,我想知道,如果所有这些问题/要点都得到满足,或者至少其中一个问题/点是,那么在您看来,一条数据是否可以成为该州的一部分满意。

    由于 (请原谅我的英语,这不是我的第一语言)

1 个答案:

答案 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之外使用。)