Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dom 扩展反应组件赢得';在调用render()之后更新_Dom_Reactjs - Fatal编程技术网

Dom 扩展反应组件赢得';在调用render()之后更新

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代码,以采用更灵活的方法

  • 我有一个扩展React.component的抽象组件,比如说
    类ATable扩展React.component
  • 另一个表扩展了这个表,如下所示:
    class FooTable扩展了ATable
  • 其他一些表也这样做:
    class BarTable扩展了ATable
  • (抽象)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不支持这一点。