检测相当支持是由defaultProps传递或设置的

时间:2017-05-02 16:56:36

标签: reactjs

如果在React中可以做两个密切相关的功能之一,我会觉得很方便,纯粹为了方便/语法糖,因为我知道我可以做我想要的没有它们,它只是有点丑陋/慢。我怀疑两者都无法完成,所以不要写两个几乎相同的问题,我在这个问题上都要问这两个问题,这样你就可以一下子实现我的梦想:)

我发现自己想要一次便利功能,有些方法可以在道具中存储更多关于道具设置的知识,以避免编写尽可能多的辅助方法。

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

我现在想知道是否没有提供警告或错误评估程序,如果是这样的话,我不会为了永远不会使用的警告/错误图标腾出空间,我不能只检查功能是什么因为我使用defaultProps,所以未定义。我想要的是检查这些值是否未由操作员设置的两个快速便利选项之一。如下所示:

  1. 某个功能检查了一个道具是由用户传递的,而不是默认道具设置,我可以打电话找出相应的值集。
  2. 在组件更新时快速修改道具的某种方法,如果两个评估器都未定义,我可以设置一些showIcon prop,然后将评估器设置为我的默认的always-false蒸发器;无需采用某种方式感觉有点矫枉过正的生命周期方法。
  3. 是否存在其中任何一种或某种等效的快速方式进行此类检查?

    我知道最干净的选项是不使用默认道具,而是使用返回我的求值程序的方法,如果没有传递则返回默认求值程序,当我想使用求值程序时,然后在我检查道具中的未定义求值程序时想知道是否提供了评估员。这有效,我只是想知道是否有一些我不知道的更快或更冷的语法糖?

2 个答案:

答案 0 :(得分:3)

对于第1点:您无法检查是否传递了道具或默认设置,因为这样做会破坏拥有默认道具的整个点。如果您希望能够判断是否传入道具,则必须使用默认道具并检查未定义。

至于第2点:不仅没有办法做到这一点,而且永远不会从接收它们的组件中改变道具。这与React的工作方式完全相反。组件应该使用它的道具并处理它们。如果某个值或UI元素是组件的“输出”并从其props计算,则它不应该是该组件的prop。如果你需要检测道具何时发生变化,那么生命周期方法就不会过度,它们是正确的方法。

答案 1 :(得分:2)

由于您知道哪些功能是默认功能,因此您可以明确检查它们。您可以使用相等比较:

if(this.props.errorEvaluator === this.defaultErrorEvaluator) {
    // Set up styles to exclude formatting
}

你需要稍微偏离你的方式,以确保你总是使用那个评估员,并且呼叫者没有得到它,但这不应该是困难的