我想更改hasSubmit密钥的值,就像在第一个代码部分中一样.我知道这不推荐.但第二个代码是异步的,我不想使用的回调函数setState.
this.state和setState?hasSubmit立即改变国家价值?第一个代码:
hasSubmit第二个代码:
false
加:
场景是:
getInitialState()设置hasSubmit在false.submithasSubmit当我点击true按钮时会改变.submit将hasSubmit在提交时更改为.
第一次单击true没有问题,submit将被设置为Second asynchronous code.
但是第二次点击hasSubmit将使用错误true,因为First Code它仍然是hasSubmit,而setState可以解决问题.
反应文件指出render函数应该是纯这意味着它不应该使用this.setState它.但是,我相信,当状态依赖于"远程",即从阿贾克斯call.The唯一的解决办法的结果是setState()一个内部render功能
在我的情况下.我们的用户可以登录.登录后,我们还需要检查用户的访问权限(ajax调用)来决定如何显示页面.代码是这样的
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>
}
}
})
Run Code Online (Sandbox Code Playgroud)
ajax调用不能出现,componentDidMount因为当用户单击LOGIN按钮时,页面被重新呈现并且还需要ajax调用.所以我认为唯一的地方setState是在render函数内部违反了React原则
更好的解决方案?提前致谢