【问题标题】:Do React Hooks use more memory than Class Components?React Hooks 是否比 Class Components 使用更多内存?
【发布时间】:2020-08-15 21:05:00
【问题描述】:

我的理解是 Javascript 类将它们的方法存储在 Class 原型中,因此所有 Class 实例在调用这些方法时都在内存中使用相同的函数定义。即每个实例都使用内存中的单个函数定义。

对于 React Hooks,功能组件可以通过 useState() 返回的函数更新状态。例如

import React, { useState } from 'react'

function MyComponent(){
    const [greeting, setGreeting] = useState("Hello")

    return <h1>{greeting}</h1>
}

如果我的应用程序要渲染 100 个 MyComponents,那么所有 100 个组件中的 setGreeting() 函数是否会引用内存中相同的 setGreeting() 函数,或者内存中是否会有 100 个相同函数的副本?

【问题讨论】:

    标签: javascript reactjs react-hooks


    【解决方案1】:

    不,对于 100 个组件,将创建 100 个 setGreeting。SetGreeting 是对该函数的引用。所以会有100个参考。

    请参考以下沙盒链接:https://codesandbox.io/s/eager-kowalevski-x20nl

    解释:

    在下面的代码中,我存储了对 setName 函数的引用,只是为了验证它是否是相同的函数。我在窗口级别存储两个变量。如果正在存储第一个变量,我将其存储在第二个变量中,以便稍后进行比较。当我比较这两者时,它们是不同的。没有一次我收到控制台消息说“真”。所以每次都会创建不同的函数。

    import React, { useState } from "react";
    import "./styles.css";
    
    export default function App() {
      const [name, setName] = useState("asutosh");
      if (window.s1) {
        window.s2 = setName;
      } else {
        window.s1 = setName;
      }
      console.log(window.s1 === window.s2);
    
      return (
        <div className="App">
          <h1>Hello {name}</h1>
        </div>
      );
    }
    

    【讨论】:

    • 您能再解释一下沙盒吗?代码不适合我
    • @blackhaj 我已经添加了解释。并且代码有效。它只是打印控制台消息,在 UI 上什么都看不到。
    猜你喜欢
    • 2019-04-03
    • 2010-12-20
    • 2019-09-24
    • 2014-10-04
    • 2021-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多