收藏
回答

this.setData没有将数据渲染至视图层?

开发了个用户上传图片的功能,用fileID显示图片的,wx.cloud.uploadFile每次只能上传一个文件,所以只好用for循环来上传多个文件。this.setData放在循环内,会被频繁调用从而影响性能,所以应该把this.setData放在循环外,等fileID都push好之后,再渲染至视图层,但是放在循环体外this.setData就无法将数据渲染至视图层了。
已经在循环外console.log看过了file,that.data.imagesID的值是正确的,不是空数组。基本上确定了就是setData的问题,还有在循环体内调用that.setData就正常了,但这样太影响性能了,请大佬们看看该怎么将数据传到渲染层……


最后一次编辑于  08-07
回答关注问题邀请回答
收藏

6 个回答

  • 梦之狼
    梦之狼
    08-14

    解决了,换个思路,同样在addimages函数里,先用临时链接来渲染视图层,展示给用户看,然后函数再继续将fileID保存起来

    08-14
    赞同
    回复
  • 郦斌
    郦斌
    08-14

    我也遇到同样的问题,你解决了么?

    08-14
    赞同
    回复
  • 爆竹声中一岁除
    爆竹声中一岁除
    08-07

    this.setData({})更新下你改变的数组,就渲染了

    08-07
    赞同
    回复 1
    • 梦之狼
      梦之狼
      08-07
      emmm,怎么更新
      08-07
      回复
  • var 友原
    var 友原
    08-07

    你上传之后success里面的js是异步的,它不会等你全部执行完才执行下面的this.setData,你在success里面打一个console,在for外面打印一个console就知道了

    08-07
    赞同
    回复 4
    • 梦之狼
      梦之狼
      08-07
      无论在success还是for外面,file数组的值都是正确的,就是setData不能渲染到视图层
      08-07
      回复
    • var 友原
      var 友原
      08-07回复梦之狼
      setData有个回调,你set完后看看file的值和imagesID是什么
      08-07
      回复
    • 梦之狼
      梦之狼
      08-07
      setData的回调什么都没打印……(好像任何东西都不会打印)
      08-07
      回复
    • var 友原
      var 友原
      08-07
      方便做个代码片段吗,这样说是说不明白的
      08-07
      回复
  • 
    08-07

    你这个file是数组吧,imageID应该是单个图片吧

    08-07
    赞同
    回复 4
    • 梦之狼
      梦之狼
      08-07
      imagesID是传给渲染层的变量,file数组用来存每张图片的fileID
      08-07
      回复
    • 
      08-07回复
      that.data.imageID.push也会改变imageID的值,只不过不渲染页面
      08-07
      回复
    • 
      08-07
      imagesID我看你循环里面,that.data.imageID.push(res.fileID),而循环结束,你又传入一个数组,写的有点乱啊
      08-07
      回复
    • 
      08-07回复
      // 对于对象或数组字段,可以直接修改一个其下的子字段,这样做通常比修改整个对象或数组更好
      08-07
      回复
  • 老张
    老张
    08-07

    await wx.cloud.uploadFile

    08-07
    赞同
    回复 2
    • 梦之狼
      梦之狼
      08-07
      不行啊,会报错
      08-07
      回复
    • 老张
      老张
      08-07回复梦之狼
      那你需要先学学async/await怎么用
      08-07
      回复
问题标签