2017-11-26 5 views
0

wie Komponente zu machen, um neu zu laden, was ich meine nicht die Komponente wieder machen, aber ich will componentDidMount machen wieder aufgerufen werden (Lebenszyklus der Komponente neu starten)Reload-Komponente - Reagieren

class Test extends Component 
{ 

    componentDidMount() 
    { 
     console.log('component did mount'); 
    } 

    reload =() => 
    { 
     //RELOAD COMPONENT 
    }; 

    render() 
    { 
     return (<Button onPress={this.reload}/>) 
    } 

} 
+1

Die einzige Möglichkeit besteht darin, die Komponente zu deaktivieren und anschließend erneut zu rendern. Sehen Sie sich dies an: https://tylermcginnis.com/an-introduction-to-life-cycle-events-in-react-js/ –

+1

Ich glaube nicht, dass es eine gute Idee ist, eine Komponente zu deaktivieren. Ich würde Sie lieber bitten, die 'componentWillReceiveProps' Lifecycle-Methode zu verwenden, um alles, was Sie tun, in' componetDidMount' zu tun. –

+0

Könnten Sie bitte Ihr Wurzelproblem posten? Ich denke mehr Leute können dir helfen, denn was du machen willst, sollte nicht gemacht werden. Ich denke, wir können dir besser helfen, wenn du dein Grundproblem postest. – Daniel

Antwort

1

Was Sie wollen, kann getan werden. Aber es ist nicht die beste Vorgehensweise. Grundsätzlich müssen Sie die Verfügbarkeit Ihrer Komponente von der übergeordneten Komponente umschalten. Wie unten gezeigt, verfügt die übergeordnete Komponente über eine state-Eigenschaft, um die Verfügbarkeit der untergeordneten Komponente zu ermitteln.

class Parent extends Component { 
 

 
    constructor(props) { 
 
    super(props); 
 
    this.state ={ 
 
     showChild : true 
 
    } 
 
    } 
 

 
    componentDidMount() { 
 
     console.log('Parent Mounted'); 
 
    } 
 

 
    reloadChild =() => { 
 
     this.setState({ 
 
     showChild : false 
 
     }) 
 
    
 
     setTimeout(() => { 
 
     this.setState({ 
 
      showChild : true 
 
     }) 
 
     },100); 
 

 
     console.log("Reload Child Invoked") 
 
    } 
 

 
    render() { 
 
    return ( 
 
     <div > 
 
     {this.state.showChild? 
 
      <Child reloadChild={this.reloadChild}/> : null 
 
     } 
 
     </div> 
 
    ); 
 
    } 
 

 
}

Die Kinderkomponente würde wie folgt aussehen

class Child extends Component { 
 

 
    constructor(props) { 
 
    super(props); 
 
    } 
 

 
    componentDidMount(){ 
 
    console.log('Child component Mounted'); 
 
    } 
 

 
    componentWillUnmount(){ 
 
    console.log('Child Component Unmounted'); 
 
    } 
 

 
    onButtonClick =() => { 
 
    console.log("Button Clicked") 
 
    this.props.reloadChild(); 
 
    } 
 

 
    render() { 
 
    return ( 
 
     <button onClick={this.onButtonClick}> 
 
     Click Me 
 
     </button> 
 
    ); 
 
    } 
 

 
}

Wenn Sie auf die Schaltfläche der Komponente Kind klicken, wird der Aufruf der Methode in übergeordnete Komponente, die die Verfügbarkeit der untergeordneten Komponente umschaltet. Beachten Sie, dass ich setInterval in der Methode reloadChild() verwendet habe, um die Verfügbarkeit zu ändern. Wie ich bereits sagte, ist dies nicht die beste Vorgehensweise. Nur ein Workaround.

+0

das funktioniert, aber nicht das, was ich mir erhofft hatte, danke any way – Ali

+0

Ich denke, Sie wollten setTimeout anstelle von setInterval verwenden. Es sieht so aus, als ob Sie componentDidMount auslösen, indem Sie es zuerst aus dem DOM entfernen und dann erneut hinzufügen. – Kunukn

+0

Danke. Die Antwort wurde aktualisiert. Die einzige Möglichkeit, den Lebenszyklus der Komponenten neu zu starten, besteht darin, diese gemäß den OP-Anforderungen zu entfernen und dann wieder zum DOM hinzuzufügen. –

1

Sie können die Lebenszyklusmethoden rufen explizit

reload =() => 
{ 
    //RELOAD COMPONENT 
    this.componentDidMount(); 
}; 

Wenn Sie den Lebenszyklus neu zu starten, müssen Sie es aus dem DOM entfernen und erneut hinzufügen.

Verwandte Themen