我正在重构一些React代码,以便采用更灵活的方法。
class ATable extends React.Component
。class FooTable extends ATable
class BarTable extends ATable
ATable:
constructor(...args) {
super(...args);
this.components = {
tableHead: TableHead, // other (semi) abstract classes
tableBody: TableBody,
tableRow: TableRow,
(...)
}
}
render() {
<section>
<this.components.tableHead (...) />
(...)
</section>
}
FooTable:
constructor(...args) {
super(...args);
this.components.tableHead: FooHead
}
}
class FooHead extends TableHead {} // FooHead <- TableHead <- React.Component
目标是使表(实际上更复杂)成为可插拔系统。
这里的问题是,如果FooTable的props更改,则会调用render()事件一直到TableHead,但是没有DOM更新可见。在抽象之前,一切似乎都正常。
这怎么可能,我该如何解决?
答案 0 :(得分:0)
原来问题不是类的扩展,而是我试图重构......
意外地,渲染的部件被设置为构造函数链中的状态。当然,这不会得到更新。
结果是组件注册了一个道具更改,称为整个生命周期(我可以在渲染时记录新的道具)但仍然没有变化,因为道具从未应用于状态。
通过修复,现在一切正常。