【问题标题】:Converting my class-based component into functional components using hooks [duplicate]使用钩子将我的基于类的组件转换为功能组件[重复]
【发布时间】:2019-07-11 11:23:52
【问题描述】:

我是 Hooks 的新手,我真的很喜欢 hooks 让我们能够使用 useState()、useEffects( )、useReducer() 等,我也知道尽可能使用功能组件并限制容器中基于类的组件的使用总是好的level 来保存组件树中 rootbranch 的状态,它确保只有少数组件在管理我们的状态并且易于管理。

我的问题:为什么我更喜欢使用钩子而不是使用基于类的组件,这样做有什么好处?

我计划通过使用 hooks 将我的许多 基于类的组件 转换为 功能组件 来重构我现有的代码库,但我想要知道这样做是否值得?我得到的答案将帮助我做出决定。

我确信这样做有好处,但不确定为什么不改用基于类的组件

【问题讨论】:

  • 不流行的观点:类组件没有错。无状态组件和钩子非常棒,因为 Noriste 在下面概述了所有原因,但这里有一些我更喜欢使用类的原因joshpitzalis.com/defaults

标签: reactjs react-hooks


【解决方案1】:

我的问题:为什么我更喜欢使用钩子而不是使用基于类的组件,这样做有什么好处?

主要用于:

  • 可读性/简洁性:大多数时候,您选择使用基于类的组件来做简单的事情(受控输入组件、简单的 UI 选择/选项)和你通常会这样做

    • 添加一些交互(onCLickonChange)处理程序
    • 添加构造函数将它们绑定到当前组件 如果您要实现副作用,则开始使用 React 生命周期方法,例如 componentDidMountcomponentDidUnmount 等。
      您的组件只是为了做一些简单的事情而变得越来越冗长。

      Hooks 可以帮助您通过更简单易读、更简洁和更易读的组件来减少这种冗长。代码行不再有 20%-50% 专门用于类结构(定义、方法等),只是为了包装您自己的代码……而是直接使用约 100% 的代码。
  • 简单性:钩子允许您编写超级简单和原子的副作用/状态逻辑,您可以在一段时间内将其插入到您的组件中。 要将行为/功能添加到超级简单的组件,您不需要将它们转换为类,“强制”自己使用其中一种 React 模式(高阶组件、渲染道具等),尤其是在开始时,让 React 很难上手

  • 有状态逻辑重用:Hooks 非常简单和可连接,您可以混合使用它们并添加丰富/复杂的功能而不用担心它们(实际上 Hooks 只能在功能组件和...其他 Hooks 本身)

  • 可测试性:这是一个高级问题,但也可能很重要。虽然 Hooks 将表示逻辑与有状态逻辑混合在一起(UI 和状态/副作用不再分离),但 Hooks 可以开发为超级容易测试的本身功能(独立于您考虑单元测试的好坏) .

我计划通过使用钩子将许多基于类的组件转换为功能组件来重构我现有的代码库,但我想知道这样做是否值得?我得到的答案将帮助我做出决定。

文档自己说,在做之前三思而后行

尽量避免过早添加抽象。

并阅读Kent post的“useEffect 不是 componentDidMount + componentDidUpdate + componentWillUnmount”。在执行此操作之前,您必须了解一些禁忌症。
相反:考虑为未来的每个组件使用 Hook,而不是重构旧组件。

所以在做之前做一些检查和测试,只有当你掌握钩子时才重构你的组件?

附言我引用了 HOC 等 React 模式:它们仍然有效且有用,并且有很多空间供它们使用,只是您不会发现自己将它们用于不需要它们的简单事情

p.p.s.如果你习惯了 React Hooks,你会发现 my memorandum 很有用,我为所有已经阅读过文档的人编写了它,并总结了最重要的 Hooks 内容(链接到文档等)

【讨论】:

  • 非常感谢您提供如此详细的答案,这非常有帮助:)
  • 不客气,我刚刚添加了my memorandum的链接,希望对您有所帮助?
猜你喜欢
  • 2020-05-18
  • 1970-01-01
  • 1970-01-01
  • 2021-11-27
  • 2020-06-06
  • 1970-01-01
  • 2023-03-25
  • 2020-10-27
  • 1970-01-01
相关资源
最近更新 更多