【发布时间】:2021-03-12 05:16:39
【问题描述】:
这更多是一个理论和最佳实践问题,而不是一个操作问题,但是在 React 组件中初始化一个类并在组件的整个生命周期中维护该单一实例的正确方法是什么?例如,考虑这个类:
// MyClass.ts
class MyClass {
constructor(){
console.log('Initialized MyClass');
}
}
还有以下两种方法:
// Test.tsx
import React, { memo } from 'react';
const myClass = new MyClass();
const Test = memo(() => {
// I can use myClass here
return null;
});
export default Test;
这可行,但如果我导入此组件;即使我不使用它,也会打印控制台语句。 (通过使用,我的意思是我不会在任何地方做<Test />)
// Test.tsx
import React, { memo } from 'react';
const Test = memo(() => {
const myClass = new MyClass();
// I can use myClass here
return null;
});
export default Test;
这也有效,除了每次重新渲染 Test get 时,我都会打印控制台日志语句。
我什至尝试通过使用 useRef 来解决这两个问题(MyClass 即使在不使用时也会被初始化,并且 MyClass 在每次重新渲染时都会重新初始化),因为这应该在实例的生命周期中保持状态
// Test.tsx
import React, { memo, useRef } from 'react';
const Test = memo(() => {
const myClass = useRef<new MyClass()>;
return null;
});
export default Test;
但这和方法2有同样的问题。
【问题讨论】:
标签: reactjs react-native