React:覆盖时调用函数的父版本

时间:2016-07-28 08:27:39

标签: reactjs

当我覆盖子类中的函数时,如何调用该函数的父版本?

假设我在React中有两个组件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?
  }
}

谢谢!

1 个答案:

答案 0 :(得分:1)

你不应该这样做

在github上查看issue

  

许多人已经习惯于使用OO继承而不仅仅是   一个工具,但作为其应用程序中的主要抽象方式。   我你在Java商店工作过,你会知道我在说什么。   在我个人看来,经典的OO继承(在   让许多流行语言成为大多数工作的最佳工具   单独所有工作。但应该更多地处理这种情况   在框架或范例中使用继承时要小心   使用功能组合作为其主要抽象(React)。那里   是我们想要防止的某些模式(有许多奇怪的   人们在组合渲染时可以想到的东西   继承没有意义,通过简单的解决   组成)。还存在使突变更方便的风险。它   从ES6类开始只是作为一种更好的语法可能是有意义的   用于创建React组件,故意限制某些用例   (限制继承深度,制作一些React基类方法   最后)(仅当与React组件一起使用时 - 所有非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>;
  }
}