2016-11-11 18 views
0

我知道Child組件可以調用BaseComponentsetTitle的方法。React,父類是否在子類繼承並裝入時運行生命週期方法?

但是,看起來安裝Child組件時,BaseComponent的生命週期方法componentDidMount將不會執行。

class BaseComponent extends React.Component{ 
 
    componentDidMount() { 
 
     console.log('baseComponent componentDidMount') 
 
    } 
 
    
 
    setTitle(title) { 
 
     document.title = title || 'default title' 
 
    } 
 
} 
 
class Child extends BaseComponent{ 
 
    constructor() { 
 
     super(); 
 
    } 
 
    
 
    componentDidMount() { 
 
     this.setTitle(); 
 
     console.log('child componentDidMount') 
 
    } 
 
    
 
    render() { 
 
     return <div>react is awesome</div> 
 
    } 
 
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>

我也知道,也許HOC是更好的解決方案。如果使用es5,則mixins是最好的方法。 但這不是我的問題。那麼,是否有可能執行BaseComponent生命週期方法。

回答

1

你應該避免繼承。就像你說的,110C是去... 爲了您的信息的方式,你可以調用父類與超:

class Child extends BaseComponent{ 

    componentDidMount() { 
     super.componentDidMount(); // Call the parent class 
     this.setTitle(); 
     console.log('child componentDidMount') 
    } 

    render() { 
     return <div>react is awesome</div> 
    } 
} 
+0

有趣的〜我也使此代碼'React.Component.prototype.setTitle'。這是一種不調用'super.someMethod'的方法(因爲我不想每次調用它,我希望它在每個子類'componentDidMount'時都會執行),並且在子內部'componentDidMount'中自動執行它? – novaline