2016-07-28 75 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

真棒,組成繼承。經典:)謝謝! –