参数为`new`关键字的useState [英] useState with `new` keyword as parameter

查看:0
本文介绍了参数为`new`关键字的useState的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在构建一个独立的服务来处理复杂的事情,该服务是一个类,仅用于测试提议,我在useState中模拟。

重点是我在构造函数中忘记了console.log,并且意识到在重新呈现组件时,类构造函数被调用了很多次。这种行为不会导致意想不到的行为或类似的事情,但我在问自己为什么会发生这种情况,因为我知道在它的Call上的useState中声明的事情不会重复,但显然我错了导致以下问题的原因。

  1. 为什么会发生这种情况?(我没有找到关于此特定案例的任何文档)
  2. 这是否会影响内存或处理?(因为类被多次重新实例化)
  3. 垃圾回收器收集吗?

我创建了一个小沙箱来举例说明我所说的内容,您可以看到名为";的单词在控制台上多次显示,并且一直显示单击该按钮。 https://codesandbox.io/s/new-class-inside-usestate-w9et3?file=/src/App.js

推荐答案

这是一个常见错误,Reaction文档中没有明确提及。

每个呈现上执行的函数组件的主体。 从构造函数记录日志是预期的行为,因为编写这样的代码:

const [example] = useState(new Foo());

是否将结果在每次呈现时调用new Foo()是,尽管useState挂钩不考虑该结果。


因此,您希望将lazy initial设置为只调用一次:

const [example] = useState(() => new Foo());

initialState参数是在初始呈现期间使用的状态。在随后的渲染中,它将被忽略。如果初始状态是代价高昂的计算的结果,则可以改为提供一个函数,该函数将仅在初始呈现时执行

这篇关于参数为`new`关键字的useState的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆