Elm vs React:为什么 Elm 中没有生命周期函数?
Elm vs React: why no lifecycle functions in Elm?
我在 Elm 中构建了几个应用程序,现在在 React 中构建了几个应用程序。
在 React 中,为我提供了 shouldComponentUpdate
之类的功能,当我可能不想经常渲染组件时。
我现在才在想:为什么 Elm 没有(或不需要)它们?
对于 re-rendering 的具体问题,开箱即用的 Elm 使用虚拟 DOM 差异化:如果它的虚拟 DOM 改变了,真实的 DOM 也会相应地更新.这比直接在 DOM.
上工作要便宜得多
有趣的是,使用 Html.lazy
时 Elm 的行为 与将组件定义为函数 时 React 的 行为相同(即。不是从 Component
或 PureComponent
继承的 class 的对象):因为你不依赖副作用(生命周期函数是一个合适的例子),给定相同的函数输入,你的组件将总是 产生相同的输出。这样,Elm 或 React 只需要 re-render 你的组件,如果它的输入以某种方式发生变化。因此,通过这种方式,您不必关心您的组件是否需要 re-rendered:Elm 会处理。
那么,这些生命周期方法呢?例如:
shouldComponentUpdate
:正如我上面提到的,当使用 Html.lazy
时,Elm 会检查您的输入是否发生了变化:如果没有,那么在功能上下文中显然不需要 re-rendering .否则,Elm 将对其虚拟 DOM 进行 diff。不过,在这两种情况下,都不需要告知 Elm 是否需要渲染。
componentWillReceiveProps
: 与您的 update
功能相当。
componentDidMount
:我认为没有与此等效的组件:要么您的组件存在并被渲染,要么不存在。这非常类似于将函数用作组件。
我在 Elm 中构建了几个应用程序,现在在 React 中构建了几个应用程序。
在 React 中,为我提供了 shouldComponentUpdate
之类的功能,当我可能不想经常渲染组件时。
我现在才在想:为什么 Elm 没有(或不需要)它们?
对于 re-rendering 的具体问题,开箱即用的 Elm 使用虚拟 DOM 差异化:如果它的虚拟 DOM 改变了,真实的 DOM 也会相应地更新.这比直接在 DOM.
上工作要便宜得多有趣的是,使用 Html.lazy
时 Elm 的行为 与将组件定义为函数 时 React 的 行为相同(即。不是从 Component
或 PureComponent
继承的 class 的对象):因为你不依赖副作用(生命周期函数是一个合适的例子),给定相同的函数输入,你的组件将总是 产生相同的输出。这样,Elm 或 React 只需要 re-render 你的组件,如果它的输入以某种方式发生变化。因此,通过这种方式,您不必关心您的组件是否需要 re-rendered:Elm 会处理。
那么,这些生命周期方法呢?例如:
shouldComponentUpdate
:正如我上面提到的,当使用Html.lazy
时,Elm 会检查您的输入是否发生了变化:如果没有,那么在功能上下文中显然不需要 re-rendering .否则,Elm 将对其虚拟 DOM 进行 diff。不过,在这两种情况下,都不需要告知 Elm 是否需要渲染。componentWillReceiveProps
: 与您的update
功能相当。componentDidMount
:我认为没有与此等效的组件:要么您的组件存在并被渲染,要么不存在。这非常类似于将函数用作组件。