2017-02-07 7 views
0

Ich habe zwei Komponenten wie folgt:Reactjs nennen componentWillMount der Elternkomponente

class Parent 
{ 
    componentWillMount() { 
    console.log('parent componentWillMount'); 
    } 
} 

class Child extends Parent 
{ 
    componentWillMount() { 
    console.log('child componentWillMount'); 
    } 
} 

Aber wenn das Kind Komponente der componentWillMount Methode der übergeordneten Komponente geladen wird, wird nicht automatisch geladen. Wie rufen Sie die ComponentWillMount-Methode der übergeordneten Komponente auf?

Dank

+0

Warum müssen Sie die componentWillMount der Eltern zugreifen? Basierend auf dem Render-Baum von react ist es nicht notwendig, Eltern wieder zu rendern, wenn die Kind-Komponente erneut gerendert wird. – Robsonsjre

+1

Ich würde vorschlagen, diese Art von Vererbung nicht mit React-Komponenten zu machen. Theoretisch könnte man 'supercomponentWillMount()' nennen, aber das ist keine gute Übung. https://twitter.com/dan_abramov/status/571278443712794625?lang=en –

Antwort

2
 class Child extends Parent 
     { 
     componentWillMount() { 
      super.componentWillMount() ; //parent componentWillMount 
      console.log('child componentWillMount'); 
     } 
     } 

erklären:

Child#componentWillMount überschreibt Parent#componentWillMount. Also:

  • wenn Sie brauchen nur Logik der Parent#componentWillMount, ohne zusätzliche Logik wird empfohlen componentWillMount von Child zu entfernen.

  • Wenn Sie Parent#componentWillMount anrufen mit etwas Logik anhängt, behalten Child#componentWillMount und rufen im Inneren super.componentWillMount();

0

Sie können ein Elternteil die Methode in der Folge Weise nennen:

class Child extends Perent { 
    componentWillMount() { 
     super(); 

     // Insert your child specific code here 
    } 
} 

Aber wie Ben Nyrberg already mentioned in the commentses ist keine gute Praxis.

Die gute Praxis von Komponenten Wiederverwendung von Code durch die Art und Weise folgende Reaktion mit Komponenten Zusammensetzung:

class Parent extends React.Component { 
    componentWillMount() { 
     // Reusable functionality here 
    } 

    render() { 
     return {this.props.children} 
    } 
} 

class Child extends React.Component { 
    componentWillMount() { 
     // Child specific functionality 
    } 

    render() { 
     return <div>Whatever you want</div> 
    } 
} 


class App extends React.Component { 
    render() { 
     return <Parent> 
      <Child /> 
     </Parent> 
    } 
} 
+0

Ich denke, es gibt einen Tippfehler: 'super()' nennt 'Parent's Konstruktor, nicht die gleiche Methode. –

Verwandte Themen