2016-08-18 6 views
0

nicht sicher, was ich falsch mache, aber meine Komponente in SetTimeout gewickelt ist nicht auf das DOM gemacht zu werden:Ärger Komponente Einsteigen SetTimeout Render

const ContentMain = Component({ 
    getInitialState() { 
     return {rendered: false}; 
    }, 
    componentDidMount() { 
     this.setState({rendered: true}); 
    }, 
    render(){ 
     var company = this.props.company; 

     return (

      <div id="ft-content"> 
       {this.state.rendered && setTimeout(() => <Content company={company}/>,3000)} 
      </div> 
     ) 
    } 
}) 

Antwort

1

ich dies tippe funktioniert nicht, weil die render Methode benötigt alle seine Eingabe gleichzeitig konsumiert werden und es kann andere Komponenten im Nachhinein nicht wiedergeben, gibt es einen bestimmten Fluss zu Reagieren. Ich würde vorschlagen, das Timeout von render Methode zur Logik willen sowieso zu trennen, und tun es in componentDidMount wie folgt aus:

const ContentMain = Component({ 
    getInitialState() { 
     return {rendered: false}; 
    }, 
    componentDidMount() { 
     setTimeout(() => { 
      this.setState({rendered: true}); 
     }, 3000); 
    }, 
    render(){ 
     if (!this.state.rendered) { 
      return null; 
     } 

     var company = this.props.company; 

     return (
      <div id="ft-content"> 
       <Content company={company}/> 
      </div> 
     ) 
    } 
}) 

Ändern der Zustand löst die Methode machen.

Eine Randnotiz - selbst wenn Ihr ursprünglicher Ansatz funktionierte, würden Sie die Komponente jedes Mal flackern sehen, wenn sie nach dem ersten Laden gerendert wurde. Schätze, du würdest das nicht wollen :)

+0

versuchte es, es funktioniert nicht. Was passiert, ist das Inhaltsverzeichnis auf dem Bildschirm. Dann, irgendwann später (3000), tut es einiges. Das Rendern wird also nicht verzögert, da componentDidMount nach dem Rendern ausgeführt wird. – PositiveGuy

+0

Das anfängliche Rendern sollte nichts zurückgeben (da this.state.rendered falsch ist) und 3 Sekunden nach componentDidMount wird das gerenderte Objekt auf true gesetzt, was ein anderes Rendern auslöst, das a auslöst neues Rendern Wenn etwas nicht funktioniert, ist es wahrscheinlich etwas anderes ... haben Sie irgendwelche Fehler? –

+0

ja ich sehe nicht die Verzögerung passieren, keine Fehler. – PositiveGuy