React useMemo 内存清理

Ива*_*нов 5 reactjs react-hooks

cat.destroy()当组件死掉时,我如何通过方法进行内存清理?

const object = useMemo(() => {
  return new Cat()
}, [])
Run Code Online (Sandbox Code Playgroud)

buz*_*tto 1

清理组件卸载时执行的钩子的效果。它由钩子处的返回函数执行useEffect:

useEffect(() => {
  // return a function to be executed at component unmount
  return () => object.destroy()
}, [object])
Run Code Online (Sandbox Code Playgroud)

注意:正如 @Guillaume Racicot 指出的那样,在某些情况下,执行 unmount 时对象可能尚未创建,因此您将面临错误。在这种情况下,请记住有条件地执行destroy,您可以object?.destroy()为此使用可选链接。

  • 这不是问题的答案。问题是:如何在使用记忆时清理某些内容 (9认同)
  • 这在 React 18 中不起作用 (2认同)
  • @buzatto 效果在 React 18 中在挂载上运行两次,因此将在第二次效果运行之前在挂载上调用此销毁。 (2认同)
  • @buzatto 严格模式这样做只是因为当效果行为不当时它会导致错误。因此,严格模式实际上通过在第一次渲染时调用“object.destroy()”来将此效果标记为已损坏。 (2认同)