检测宁愿道具被传入或默认设置

dso*_*len 4 reactjs

如果可以在React中实现两个紧密相关的功能之一,我会觉得很方便,这纯粹是为了方便/语法糖,因为我知道没有它们我就可以做我想做的事情,只是有点难看/慢一点。我怀疑两者都做不到,因此请写两个几乎完全相同的独立问题,我在这个问题中都问这两个问题,这样您就可以一次使我的梦想破灭:)

我发现自己几次想要一种便利功能,以某种方式在道具中存储一些更多关于道具的知识,从而避免编写许多辅助方法。

要使用我的最新示例,我有两个道具errorEvaluator和warningEvalutator是用来检查数据集的函数,这些数据集应标记为警告或错误状态。它们都具有默认属性,如果没有提供评估,则它们总是返回false,因此我不必经常在代码中进行空检查。

我现在想知道是否未提供警告或错误评估器,如果这样,我将不会抵消所有将不会使用的警告/错误图标的空间,我不能仅仅检查未定义的函子,因为我使用defaultProps。我想要的是用于检查操作员是否未设置这些值的两个快速便捷选项之一。所以像这样:

  1. 与默认道具相比,用户通过了一些检查道具的函数,而不是通过默认道具设置的函数,我可以调用它来找出一个值集。
  2. 每当组件更新时,一种可以快速修改道具的方法,如果两个评估器都未定义,则可以设置一些showIcon道具,然后将评估器设置为默认的false蒸发器;不必诉诸生命周期方法,而这种方法在某种程度上感觉像是过分杀伤力。

是否存在上述任一方法或进行此类检查的等效快速方法?

我知道的最干净的选择是不使用默认道具,而是使用一些方法返回我的评估者,如果未通过默认评估器,则返回默认评估者,例如当我想使用评估者时,然后在我想知道道具时检查未定义的评估者如果提供了评估者。那行得通,我只是想知道是否有我不知道的更快或更凉爽的语法糖?

Ped*_*lho 5

对于第1点:您无法检查道具是否已传入或默认设置,因为这样做会破坏拥有默认道具的全部要点。如果您想知道是否传递了道具,则不得使用默认道具并检查未定义。

关于第2点:不仅没有办法这样做,而且永远不要从接收道具的组件内部更改道具。这正好与React的工作方式背道而驰。组件应采取其道具并加以处理。如果某个值或UI元素是组件的“输出”并根据其属性进行计算,则它不应是该组件的属性。如果您需要检测道具何时发生变化,那么生命周期方法并不过分,这是正确的方法。