【问题标题】:When would a react component not be a pure component?什么时候反应组件不是纯组件?
【发布时间】:2019-05-30 03:49:50
【问题描述】:

刚刚读到这个:https://reactjs.org/docs/react-api.html#reactpurecomponent

并试图找出一个函数什么时候不会返回纯粹的东西?

如果你给一个组件同样的 props/state,那么它肯定会返回同样的结果吗?

【问题讨论】:

    标签: javascript reactjs components


    【解决方案1】:

    想象一下,如果您有一个显示天气的组件,如果是白天则显示太阳的背景图像,如果是夜晚则显示月亮的背景图像。

    你会通过道具传递温度、风速等,但你会根据一天中的时间显示正确的图像。

    所以,如果你在白天和晚上通过了 15 度的温度,即使你通过了相同的道具,组件的外观也会有所不同。

    【讨论】:

      【解决方案2】:

      如果你的函数组件有任何副作用,那么它就不是一个纯组件。例如,通过Date.now() 读取当前时间是一个副作用。如果那个日期是通过道具传递的,那么你很好。但是 React/JavaScript 不能保证函数组件没有副作用。

      考虑以下功能组件。

      function Impure() {
        return <p>{Date.now()}</p>
      }
      
      function Pure(date) {
        return <p>{date}</p>
      }
      

      【讨论】:

      • 如此安全地假设如果东西被传递,那么它可能是纯粹的?
      • 不,因为你可以想象一个 date 属性被传入,但没有被使用:function Impure(date) { return &lt;p&gt;{Date.now()}&lt;/p&gt; }
      • 那么没有规则可以不看代码就知道什么时候会/不会?
      • 在 JavaScript 中,这是正确的。在 Haskell 或 Elm 中,您只需要查看函数的类型,而不是它的实现。在那些纯函数式语言中使用副作用时,该函数的类型让您知道存在副作用。如果没有副作用,该函数的类型会让您知道没有副作用。
      猜你喜欢
      • 1970-01-01
      • 2016-11-21
      • 2020-10-14
      • 1970-01-01
      • 2018-05-12
      • 2011-10-14
      • 1970-01-01
      • 2011-07-19
      • 2019-07-11
      相关资源
      最近更新 更多