在我的 Typescript 应用程序中,有一个表示一些数据的类。此类正在端到端共享(前端和后端都使用它来构建数据)。它有一个名为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([])
to表示items
会解决这个问题,但正如我所说的Data
有很多属性,一些功能也是如此。那是另一个噩梦。
我想知道从类实例渲染数据的最佳方式是什么,无需重新渲染黑客或将整个实例解包到本地组件状态。
谢谢!
这是一个 Codesandbox 演示,显示了使用类和本地状态之间的区别。