Ruft setState render ist nicht vermeidbar

Reagieren Dokument besagt, dass die render Funktion sollte Reine was bedeutet, es sollte nicht mit this.setState.Ich glaube jedoch, dass, wenn der Staat angewiesen auf "remote", d.h. Ergebnis von ajax-call.Die einzige Lösung ist setState() innerhalb einer render Funktion

In meinem Fall.Unsere Benutzer können in der Lage sein sollten, um sich anzumelden. Nach der Anmeldung müssen Wir auch prüfen, den Zugriff des Benutzers (ajax-call )zu entscheiden, wie die Seite angezeigt wird.Der code ist so etwas wie das

React.createClass({
     render:function(){
          if(this.state.user.login)
          {
              //do not call it twice
              if(this.state.callAjax)
              {
              var self=this
              $.ajax{
                  success:function(result)
                  {
                      if(result==a) 
                      {self.setState({callAjax:false,hasAccess:a})}
                      if(result==b) 
                      {self.setState({callAjax:false,hasAccess:b})}

                  }
              }
              }
              if(this.state.hasAccess==a) return <Page />
              else if(this.state.hasAccess==a) return <AnotherPage />
              else return <LoadingPage />
          }
          else
          {
            return <div>
                   <button onClick:{
                   function(){this.setState({user.login:true})}
                   }> 
                   LOGIN
                   </button>
                   </div>
          }
     }
})

Den ajax-Aufruf nicht erscheinen können in componentDidMount weil, wenn Benutzer klicken Sie auf LOGIN-button wird die Seite neu gerendert, und es müssen auch ajax-call .Also vermute ich, dass der einzige Ort, an setState ist innerhalb der render Funktion, die einen Verstoß gegen das Prinzip Reagieren

Besser Lösungen ? Vielen Dank im Voraus

Rufen Sie $.ajax wo immer Sie Sie nennen this.setState({ callAjax: true }).
anfangs ist wahr, habe ich es als falsch, weil ich nicht anrufen möchten, das zweite mal. Oder es wird eine unendliche Schleife Rendern und setState
Könnten Sie ein komplettes Beispiel, einschließlich der Verwendung der Komponente?
danke. ich nehme an, dass ich schon kown die anwser. setState-render-Funktion nicht irgendein problem haben, solange in einer asynchronen Weise. wie Ereignis-listener(normaler Weg) oder ajax-call .ich habe gerade getestet, dass, wenn Sie nennen setstate direkt in render.Ausnahme geworfen wird. wenn Sie wickeln es in ein seTimeout Rückruf.es ist in Ordnung
Hier ist ein Beispiel von rechts AJAX-Aufrufe in Komponente facebook.github.io/react/tips/initial-ajax.html

InformationsquelleAutor Guichi | 2016-02-09

Schreibe einen Kommentar