相关疑难解决方法(0)

ReactJS中this.state和this.setstate的区别是什么?

我想更改hasSubmit密钥的值,就像在第一个代码部分中一样.我知道这不推荐.但第二个代码是异步的,我不想使用的回调函数setState.

  • 是什么的差异this.statesetState
  • 有没有办法hasSubmit立即改变国家价值?

第一个代码: hasSubmit

第二个代码: false


加:

场景是:

  1. getInitialState()设置hasSubmitfalse.
  2. submithasSubmit当我点击true按钮时会改变.
  3. submithasSubmit在提交时更改为.

第一次单击true没有问题,submit将被设置为Second asynchronous code.

但是第二次点击hasSubmit将使用错误true,因为First Code它仍然是hasSubmit,而setState可以解决问题.

javascript asynchronous reactjs

48
推荐指数
4
解决办法
3万
查看次数

在render中调用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原则

更好的解决方案?提前致谢

asynchronous reactive-programming reactjs

12
推荐指数
1
解决办法
3万
查看次数