收藏
回答

使用setData 对对象赋值失败QAQ?

使用this.setData方法对对象赋值失败!改用this直接赋值可以,什么情况?哪位老哥解释一下

回答关注问题邀请回答
收藏

5 个回答

  • 〆、维生素ゝ
    〆、维生素ゝ
    05-21

    this指向的request.then这个函数内部不是全局的了,不能使用setData() 你在 request外面给this赋值 var that=this; 里面使用的时候用,that.setData({})

    05-21
    有用 2
    回复 11
    • 〆、维生素ゝ
      〆、维生素ゝ
      05-21
      你在request 内部使用this,相当于是给 request  增加了一个原型属性,并不是指向全局的oldUserInfo。  作用域 的问题。   我个人是这么理解的。
      05-21
      回复
    • 花火
      花火
      05-21
      刚改了没有效果啊
      05-21
      回复
    • 〆、维生素ゝ
      〆、维生素ゝ
      05-21回复花火
      console.log(that.data.oldUserInfo)
      05-21
      1
      回复
    • 花火
      花火
      05-21回复〆、维生素ゝ
      感谢问题解决了
      05-21
      回复
    • xy
      xy
      05-21回复〆、维生素ゝ
      明明就是setData异步的问题,不要在这里误导别人,他用的是箭头函数好不好?此时的this指向不是全局?他自己都说了this.data这样赋值可以赋值成功
      05-21
      1
      回复
    查看更多(6)
  • 祺爸💎
    祺爸💎
    05-21

    此this.oldUserInfo并不能渲染到wxml

    --↓↓👍点击“有用”是回答的动力哦

    05-21
    有用 2
    回复
  • hot
    hot
    05-21

    图一:this.setData,应该用this.data.xxx访问。(只有data里面的变量, 才会影响视图)

    图二:this.xxx这种方式,变量定义在了Page({})之外。(不会影响视图)

    05-21
    有用 1
    回复 1
    • 花火
      花火
      05-21
      感谢解答,刚开始做小程序还有很多不了解
      05-21
      回复
  • xy
    xy
    05-21

    你这个问题很明显了,setData是异步的,导致你打印this.oldUserInfo的时候,还没赋值,所以是undifend,你可以尝试着this.setData({oldUserInfo:res},()=>{console.log(this.data.oldUserInfo)}) 应该就可以打印出来了

    05-21
    有用 1
    回复 4
    • hot
      hot
      05-21
      setData对于数据是同步的吧?对渲染层才是异步的。undifend是因为console.log(this.oldUserInfo),console.log(this.data.oldUserInfo)就正常了
      05-21
      回复
    • hot
      hot
      05-21
      setData和this.oldUserInfo是两码事
      05-21
      回复
    • xy
      xy
      05-21回复hot
      这个回复我赞同,因为没看到他的this.oldUserInfo 我以为是this.data.oldUserInfo
      05-21
      回复
    • xy
      xy
      05-21回复hot
      是的 我表达的不够清楚 setData更新视图是异步的,对数据层 是同步的 多谢指出
      05-21
      回复
  • 👀
    👀
    05-21

    1.this.xx=x不会让视图层响应更新

    2.this.setData是异步的

    05-21
    有用 1
    回复
登录 后发表内容
问题标签