参数为`new`关键字的useState [英] useState with `new` keyword as parameter
本文介绍了参数为`new`关键字的useState的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在构建一个独立的服务来处理复杂的事情,该服务是一个类,仅用于测试提议,我在useState
中模拟。
重点是我在构造函数中忘记了console.log
,并且意识到在重新呈现组件时,类构造函数被调用了很多次。这种行为不会导致意想不到的行为或类似的事情,但我在问自己为什么会发生这种情况,因为我知道在它的Call上的useState
中声明的事情不会重复,但显然我错了导致以下问题的原因。
- 为什么会发生这种情况?(我没有找到关于此特定案例的任何文档)
- 这是否会影响内存或处理?(因为类被多次重新实例化)
- 垃圾回收器收集吗?
我创建了一个小沙箱来举例说明我所说的内容,您可以看到名为";的单词在控制台上多次显示,并且一直显示单击该按钮。 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屋!
查看全文