this.setData 设置后页面无法刷新?
发布于 5 年前 作者 nxu 7080 次浏览 来自 问答
  getNextSubject:function(){
    var that = this;
    checkNextSubject(data =>{
      if(data.code == 107){
        wx.showModal({
          title:"提示",
          content: '用户正在参与其他答题请稍后再来',
          showCancel:false
        })
      }else if(data.code == 109 || data.code == 110){
        //结束
        if (timer) {
          clearInterval(timer);
          that.setData({
            right: true
          })
        }
        wx.showModal({
          title:"提示",
          content: '本轮答题已经结束,你答对了'+this.data.qaYes+'分',
          showCancel:false,
          success:function(){
            wx.navigateBack({
              delta: 0,
            })
          },
        })
      }else{
        if(data.data){
          var numid = data.data.number
          var question = data.data.subject
          var answer = data.data.optionsList
          var tips = data.data.tips
          that.setData({
            numid:numid,
            question:question,
            answer:answer,
            tips:tips
          },cb =>{
            console.log("-------------------",cb);
          })
        }
      }
    })

  },

上面是我的代码,遇到一个很奇葩的问题,第一次进页面这个方法可以正常执行并且可以渲染页面,等我把页面redirect出去后再次进页面这个方法中的setData就不起作用了,添加了回调也不执行,可以确定的是要设置的值都是存在的,

5 回复

getNextSubject:function 两次都走了没,搞一个log看看

你写了这么多if判断,有没有想过 checkNextSubject 回调data值为空的情况?

感谢大家的回复,已经找到问题并解决,不是程序分支没有执行到,也不是this丢失,这个可能是小程序自身的一个问题,异步回调层级太深,以及上下文不一致就会导致setData无法成功执行,解决办法就是把当前更新ui的逻辑独立出来不要放到回调方法里面然后把page对象当作参数传递进去然后执行更新ui的方法

首先你执行哪个分支无效, 就在哪个分支的setData第二个参数回调打印that.data 看看什么情况

你要先确定 getNextSubject 和 checkNextSubject 方法会不会执行

判断语句里面 console.log 下看执行到哪里了

回到顶部