2016-07-28 57 views
0

当我重写子类中的函数时,如何调用该函数的父版本?反应:在覆盖时调用函数的父版本

说我有两个组成部分AbstractList的和SortableList与阵营:

class AbstractList extends React.Component { 
    getItems() { 
    ... 
    } 
} 

class SortableList extends AbstractList { 
    getItems() { 
    ... do sorting first 
    return super.getItems(); // QUESTION: how am I supported to actually do this? 
    } 
} 

谢谢!

+0

你有没有尝试运行这段代码? –

回答

1

你不应该做这种方式

检查这个issue在github

许多人已经习惯于使用OO继承不只是作为 的工具,而是作为抽象的主要手段他们的应用。 我已经在Java商店工作过,你会知道我在说什么。 我个人认为,经典的面向对象继承(在许多流行语言中实现的 )通常不是大多数工作的最佳工具,让所有工作单独放置。但是,如果在框架内使用继承或使用功能组合作为其主要抽象(React)的范例,则应该更多地注意这种情况。有 是我们想要防止的某些模式(有许多奇怪的事情,当人们可以拿起与渲染和 继承,这是没有意义的,并通过简单的 组成)。还有使突变更加方便的风险。对于创建React组件,故意限制一些用例 (限制继承深度,使一些React基类方法为 final)(仅当与React组件当然一起使用)时,它可能适合于以ES6类开始,作为更好的语法 - 所有非React 使用ES6类不会受到限制)。

取而代之的是

class AbstractList extends React.Component { 
    getItems() { 
    ... 
    } 
} 

class SortableList extends AbstractList { 
    getItems() { 
    ... do sorting first 
    return super.getItems(); 
    } 
} 

你应该做

class AbstractList extends React.Component { 
    getItems() { 
    ... 
    } 
} 

class SortableList extends React.Component { 
    render() { 
     return <AbstractList items={this.props.item}>{this.props.children}</AbstractList>; 
    } 
} 
+0

真棒,组成继承。经典:)谢谢! –