React.js 状态对象与 useState 钩子?

时间:2021-01-05 08:31:33

标签: reactjs state

我通过了解用于管理组件状态的 useState 钩子开始了 React。但是,我最近发现可以使用状态对象来代替。我很困惑,似乎无法在互联网上找到很多参考资料来帮助我理解其中的区别。

以下有什么区别,如果有的话...如果有的话,哪个更受欢迎?

选项 1State 对象:

class User extends React.component {

  state = {
    username: 'Tyler'
  }

选项 2useState 钩子:

class User extends React.component {

  const [state, setState] = useState({
        username: 'Tyler'
  })

2 个答案:

答案 0 :(得分:2)

所以,这里有一些误解。

State 对象,或者当 React 使用类时使用 this.state。

这种方法有一些缺点。 React 需要给对象添加很多东西(当类被初始化时)以使其兼容 React。

因此,从 React 16 左右开始,它增加了使用函数作为应用程序构建块的能力。旧方法(使用类)仍然有效,但不鼓励。到目前为止,类确实有一些额外的功能 (https://reactjs.org/docs/hooks-faq.html#do-hooks-cover-all-use-cases-for-classes)。错误边界 (https://reactjs.org/docs/error-boundaries.html) 就是这样一件事。

在 16 之前,函数可以用作组件,但没有状态。 使用 Hooks,函数也可以有状态。

这在使用方面确实存在一些限制和操作方法 (https://reactjs.org/docs/hooks-rules.html)

关于 hooks 的最佳资源是关于该主题的 react 文档。

最后,可能是最重要的优点是代码更干净。

附言第二个例子不起作用,useState 必须在函数 defn 内。

// Option 2: useState 
function User() {
  const [state, setState] = useState({
    username: 'Tyler'
  })
}

答案 1 :(得分:1)

useState 是 React (16.8+) 中一个全新概念的一部分,称为钩子。 Hook 是一种更高效、更简单的 React 编写方式。

Hook 解决痛点:

<块引用>
  1. 管理状态:在多个组件之间重用逻辑会导致包装地狱或深度嵌套的组件。

  2. 副作用:生命周期方法中不相关的逻辑混合可能会重复,并导致不必要的副作用。

  3. 优化:Hook 可能会减少您的包大小。

请在此处阅读所有内容: https://medium.com/better-programming/react-hooks-vs-classes-add2676a32f2

相关问题