【问题标题】:React hooks compared to render与渲染相比,React 钩子
【发布时间】:2019-07-01 07:51:41
【问题描述】:

我很新的反应,当你开始一个新项目时发现样板与最近有点不同。现在它带有这样的东西:

import React from 'react';

function App() {
  return (
    <div>
      <h1>Hello world!</h1>
    </div>
  );
}

export default App;

不像以前那样:

import React, { Component } from 'react';

class App extends Component {
  render() {
    return (
      <div>
        <h1>Hello World</h1>
      </div>
    )
  }
}

export default App;

渲染功能消失了。我发现它与钩子有关。

react 中的类现在消失了吗?渲染函数也是如此吗?我知道您仍然可以使用“旧方式”,但只是为了确保我做对了。跟钩子有关系吧?

与编写组件的render和class方式相比,hook的好处是什么?

我猜这也适用于 react-native ...

【问题讨论】:

  • React 现在可以正常运行了。课程消失了,一切都变成了功能。没有渲染,只是返回。这会产生更简洁、性能更高的代码。但是,如果你愿意,你可以坚持上课。
  • @LiJonas 你的评论不公平。说“上课没了”是绝对错误的。他们很长一段时间都不会去任何地方。
  • @keul 我的意思是进一步的开发将集中在功能组件上。将继续支持类,以便让旧项目使用最新的 react 版本,而无需将代码迁移到 hooks。

标签: reactjs react-hooks


【解决方案1】:

这不是旧方法也不是新方法。这只是两种不同的方式已经存在了一段时间。

如果您构建没有状态的更简单的组件,您可以使用功能组件。这是您在帖子中使用的第一个符号:返回 JSX 表达式的函数。

如果您构建带有自己状态的更复杂的组件,并且将它们实现为类是有意义的,您可以使用类组件。这是您在帖子中使用的第二个符号:具有渲染函数的类,该函数又返回一个 JSX 表达式。

React docs 中对两者都有很好的描述。

【讨论】:

  • React v16.8 不再建议使用类,而是建议迁移到功能组件。
  • 你有那个来源吗?
  • reactjs.org/docs/hooks-faq.html 部分:Should I use Hooks, classes, or a mix of both?
  • @LiJonas 更准确。 16.8 建议为 FC 制作组件。我之所以在其中提及,是因为 migrate 这个词也可以解释为将现有基础架构转移到功能上的要求,这实际上是明确不鼓励的。
  • @apokryfos 你是对的,迁移是一个错误的词
【解决方案2】:

来自 React DOCS:

https://reactjs.org/docs/hooks-intro.html

Hooks 是 React 16.8 中的新增功能。它们让您无需编写类即可使用状态和其他 React 功能。

渲染功能没有消失。您的功能组件仍然是“渲染函数”,因为它们会返回应该渲染到屏幕的内容。

之前,为了使用state 并访问组件生命周期等其他功能,您需要将组件编写为一个类。在我看来,有了钩子,这不再是必需的,您将可以访问state 和其他具有更清晰的 API 和语法的功能。您的代码将变得更具可读性。

来自 Hooks 常见问题解答:

https://reactjs.org/docs/hooks-faq.html

我需要重写我的所有类组件吗?

没有。没有从 React 中删除类的计划——我们都需要继续交付产品并且负担不起重写。我们建议在新代码中尝试 Hooks。

我应该使用 Hooks、类还是两者兼而有之?

当您准备好后,我们鼓励您开始在您编写的新组件中尝试 Hooks。确保团队中的每个人都在使用它们并熟悉本文档。我们不建议将您现有的类重写为 Hook,除非您打算重写它们(例如修复错误)。

你不能在类组件中使用 Hooks,但你绝对可以将类和函数组件与 Hooks 混合在一个树中。组件是使用 Hooks 的类还是函数是该组件的实现细节。从长远来看,我们希望 Hooks 成为人们编写 React 组件的主要方式。

Hooks 是否涵盖类的所有用例?

我们的目标是让 Hooks 尽快涵盖类的所有用例。目前还没有不常见的 getSnapshotBeforeUpdatecomponentDidCatch 生命周期的 Hook 等效项,但我们计划很快添加它们。

Hooks 还处于早期阶段,目前一些第三方库可能与 Hooks 不兼容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-13
    • 2021-05-31
    • 1970-01-01
    • 2021-10-12
    • 2020-06-20
    • 2021-02-09
    • 2021-04-26
    • 2020-05-26
    相关资源
    最近更新 更多