Dom 扩展反应组件赢得';在调用render()之后更新
我正在重构一些React代码,以采用更灵活的方法Dom 扩展反应组件赢得';在调用render()之后更新,dom,reactjs,Dom,Reactjs,我正在重构一些React代码,以采用更灵活的方法 我有一个扩展React.component的抽象组件,比如说类ATable扩展React.component 另一个表扩展了这个表,如下所示:class FooTable扩展了ATable 其他一些表也这样做:class BarTable扩展了ATable (抽象)ATable组件有一个构造函数方法,该方法提供与其他组件的绑定: ATable: constructor(...args) { super(...args); th
- 我有一个扩展React.component的抽象组件,比如说
类ATable扩展React.component
- 另一个表扩展了这个表,如下所示:
class FooTable扩展了ATable
- 其他一些表也这样做:
class BarTable扩展了ATable
- (抽象)ATable组件有一个构造函数方法,该方法提供与其他组件的绑定:
constructor(...args) {
super(...args);
this.components = {
tableHead: TableHead, // other (semi) abstract classes
tableBody: TableBody,
tableRow: TableRow,
(...)
}
}
render() {
<section>
<this.components.tableHead (...) />
(...)
</section>
}
构造函数(…参数){
超级(…args);
此项。组件={
tableHead:tableHead,//其他(半)抽象类
桌体:桌体,
tableRow:tableRow,
(...)
}
}
render(){
(...)
}
- FooTable可以覆盖其中一些组件,使组件可插拔。事情是这样的:
constructor(...args) {
super(...args);
this.components.tableHead: FooHead
}
}
class FooHead extends TableHead {} // FooHead <- TableHead <- React.Component
构造函数(…参数){
超级(…args);
this.components.tableHead:FooHead
}
}
类FooHead扩展了TableHead{}//FooHead原来问题不是类的扩展,而是我试图重构
意外地,渲染的零件被设置为构造函数链中的状态。当然,这不会得到更新
结果是组件注册了一个道具更改,称为整个生命周期(我可以在渲染时记录新道具),但仍然没有更改,因为道具从未应用于状态
修复后,一切都正常了。原来问题不在于类的扩展,而在于我试图重构
意外地,渲染的零件被设置为构造函数链中的状态。当然,这不会得到更新
结果是组件注册了一个道具更改,称为整个生命周期(我可以在渲染时记录新道具),但仍然没有更改,因为道具从未应用于状态
修复后,现在一切正常。您是否考虑过使用更高阶组件而不是使用extends
?或者,就这一点而言,只是正常的组件组合?嗯,如果不是用箭头函数声明的,您不需要返回中的部分吗。它们是组合最佳实践的好例子。已经有很多组合,在这种情况下,有更多的灵活性是很有用的。mixin将是一个很好的解决方案,但不幸的是,根据文档,es6中不支持这一点。您是否考虑过使用更高阶的组件而不是使用extends
?或者,就这一点而言,只是正常的组件组合?嗯,如果不是用箭头函数声明的,您不需要返回中的部分吗。它们是组合最佳实践的好例子。已经有很多组合,在这种情况下,有更多的灵活性是很有用的。mixin将是一个很好的解决方案,但不幸的是,根据文档,es6不支持这一点。