收藏
回答

this.setData 设置后页面无法刷新?

  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 个回答

  • 俊
    11-07

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

    11-07
    有用
    回复
  • optimistic
    optimistic
    11-06

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

    11-06
    有用
    回复
  • 拾忆
    拾忆
    11-06

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

    11-06
    有用
    回复 1
    • 俊
      11-06
      两次都可以执行了setdata方法并且再setdata之前值都已经拿到
      11-06
      回复
  • garField
    garField
    11-06

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

    11-06
    有用
    回复 1
    • 俊
      11-06
      值已经确定可以拿到
      11-06
      回复
  • 💡
    💡
    11-06

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

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

    11-06
    有用
    回复 3
    • 俊
      11-06
      都能执行的,再最后setdata后再打印出来是有值的
      11-06
      回复
    • 💡
      💡
      11-06回复
      是在当前页面吗?this 丢失了?
      11-06
      回复
    • 俊
      11-06回复💡
      在外名定义了that,经打印没有丢
      11-06
      回复
登录 后发表内容
问题标签