Calling setState im Render ist nicht vermeidbar
as @ React-Dokument gibt an, dass dasrender
Funktion sollte @ serei was bedeutet, dass es nicht @ verwenden sollthis.setState
drin. Ich glaube jedoch, wenn der Zustand von 'remote' abhängt, d. h. Ergebnis eines Ajax-Aufrufs. Die einzige Lösung istsetState()
in einemrender
function
n meinem Fall. Unsere Benutzer sollten sich anmelden können. Nach der Anmeldung müssen wir auch den Zugriff des Benutzers (Ajax-Aufruf) überprüfen, um zu entscheiden, wie die Seite angezeigt werden sol
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>
}
}
})
Der Ajax-Aufruf kann nicht in @ angezeigt werdcomponentDidMount
denn wenn der Benutzer auf die Schaltfläche "Anmelden" klickt, wird die Seite neu gerendert und benötigt auch einen Ajax-AufrusetState
ist innerhalb desrender
Funktion, die gegen das React-Prinzip verstößt
Irgendwelche besseren Lösungen? Danke im Vorau