在我的TypeScript应用程序中,有一个表示一些数据的类。这个类被端到端共享(前端和后端都使用它来组织数据)。它有一个名为
我试图在我的组件中呈现这些数字,但是由于修改类实例不会导致重新渲染,所以我必须"强制重新渲染"来使新的
虽然这种方法可行,但存在一个主要缺点:
使用
我想知道从类实例中呈现数据的最佳方法,而不需要重新渲染或将整个实例拆分为本地组件状态。
谢谢! 这里有一个 Codesandbox演示 ,展示了使用类和本地状态之间的差异。
items
的属性,它是一个数字数组。class Data {
constructor() {
this.items = [0];
}
addItem() {
this.items = [...this.items, this.items.length];
}
}
我试图在我的组件中呈现这些数字,但是由于修改类实例不会导致重新渲染,所以我必须"强制重新渲染"来使新的
items
值被呈现出来。const INSTANCE = new Data();
function ItemsDisplay() {
const forceUpdate = useUpdate(); // from react-use
useEffect(() => {
const interval = setInterval(() => {
INSTANCE.addItem();
forceUpdate(); // make it work
}, 2000);
return () => clearInterval(interval);
}, []);
return (
<div>
<h1>with class:</h1>
<div>{INSTANCE.items.map(item => <span>{item}</span>)}</div>
</div>
);
}
虽然这种方法可行,但存在一个主要缺点:
addItem()
不是对INSTANCE
做的唯一修改;该类实际上有大约10到15个属性,代表了不同的数据部分。因此,在每次修改发生时都执行 forceUpdate()
是一场噩梦。更不用说,如果该实例将在组件外部修改,我将无法使用forceUpdate()
将更改与组件同步。使用
useState([])
代表items
将解决此问题,但是如我所说,Data
有很多属性,还有一些函数。这是另一个噩梦。
我想知道从类实例中呈现数据的最佳方法,而不需要重新渲染或将整个实例拆分为本地组件状态。
谢谢! 这里有一个 Codesandbox演示 ,展示了使用类和本地状态之间的差异。
INSTANCE && INSTANCE.
是否有可能 INSTANCE 是 null?根据提供的代码,这种情况不可能发生。 - HMR