收藏
回答

微信小程序第一次进入页面,setData能正常更新视图,再次进入页面,但是更新不了视图?

微信小程序第一次进入页面,setData能正常更视图,再次进入页面,setData数据更新,但是视图不更新

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

6 个回答

  • BKT
    BKT
    2021-09-18

    第二次进入时的this指向的实例和第一次的实例不同导致的。

    定义个页面全局变量mythis

    onShow中赋值:mythis=this;

    然后外部触发时调用mythis.setData

    2021-09-18
    有用
    回复
  • 张健
    张健
    2021-09-14

    我刚才也遇到这个问题了,查了一下,是我自己侦听的事件在unload时没有卸载,第二次打开页面再次侦听到事件了。也就是内存泄露了。我用的是事件,建议用单例回调的朋友可以查一下是不是页面退出时没有删除单例上的callback。

    但是为啥上一个没销毁的页面会导致当前页面数据失效还没搞懂。

    2021-09-14
    有用
    回复
  • 悠哉码农的日常
    悠哉码农的日常
    2021-07-30

    楼主,我也遇到了个类似的问题,请问下你是怎么解决的

    2021-07-30
    有用
    回复
  • 捌玖💫
    捌玖💫
    2021-01-07

    我也遇到同样的问题,请问楼主是否已经解决?

    2021-01-07
    有用
    回复 5
  • TNT
    TNT
    2020-11-18

    你在wx.nextTick后试试

    2020-11-18
    有用
    回复 7
    • 困困的囡囡
      困困的囡囡
      2020-11-19
      这个是在组件中用吧,在页面中可以使用吗
      2020-11-19
      回复
    • 困困的囡囡
      困困的囡囡
      2020-11-19
      用了还是不行
      2020-11-19
      回复
    • 困困的囡囡
      困困的囡囡
      2020-11-19
      我把data里的数据清空之后再赋值就可以更新,但是页面就会闪动
      2020-11-19
      回复
    • TNT
      TNT
      2020-11-19回复困困的囡囡
      代码片段来个 我复现下。
      2020-11-19
      回复
    • 困困的囡囡
      困困的囡囡
      2020-11-19回复TNT
      // pages/index/index.js
      const regeneratorRuntime = global.regeneratorRuntime
      import api from '../../api/api'
      var app = getApp()
      var addData = app.globalData
      Page({
       /**
        * 页面的初始数据
        */
       data: {
        taskList: [], //任务列表
        pages: null, //总加载页数
        currentPage: 1, //当前页
        is_load: true, //是否加载请求
       },
       /**
        * 查询任务列表
        */
       async applyTasks() {
        if (this.data.is_load) {
         this.setData({
          is_load: false,
         })
         var params = {
          pageSize: 10,
          currentPage: this.data.currentPage,
          isGetAll: false,
         }
                  // this.setData({
                  // taskList:[]
                  // })
         let res = await api.connect('/task/queryAllTasks', {
          data: params,
         })
         if (res.data.code === '2000') {
                      var arr1 = this.data.taskList,
                          arr2=res.data.data;
          if (this.data.currentPage === 1) {
           this.setData({
            taskList: arr2,
            pages: Math.ceil(res.data.count / 10),
            is_load: true,
                          })
                          this.setData({
                              taskList:this.data.taskList
                          })
          } else {
           this.setData({
            taskList: arr1.concat(arr2),
            pages: Math.ceil(res.data.count / 10),
            is_load: true,
           })
          }
         }
        }
       },
       /**
        * 生命周期函数--监听页面加载
        */
       onLoad: function (options) {
          this.setData({
         currentPage: 1,
        })
        this.applyTasks()
        wx.setNavigationBarTitle({
         title: addData.textTitle,
        })
       },
       /**
        * 生命周期函数--监听页面初次渲染完成
        */
       onReady: function () {},
       /**
        * 生命周期函数--监听页面显示
        */
       onShow: function () {
              const pages = getCurrentPages()
              const perpage = pages[pages.length - 1]
              perpage.onLoad()
       },
       /**
        * 生命周期函数--监听页面隐藏
        */
       onHide: function () {},
       /**
        * 生命周期函数--监听页面卸载
        */
       onUnload: function () {},


       /**
        * 用户点击右上角分享
        */
       onShareAppMessage: function () {},
      })
      2020-11-19
      回复
    查看更多(2)
  • 加肥猫
    加肥猫
    2020-11-18

    创建一个可以重现问题的代码片段才能判断问题 https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html

    2020-11-18
    有用
    回复 5
    • 困困的囡囡
      困困的囡囡
      2020-11-18
      难以复现,setData已经成功,但是界面没有更新
      2020-11-18
      回复
    • 困困的囡囡
      困困的囡囡
      2020-11-18
      在setData成功之后打印的data中的数据,数据正确,但是界面没有更新
      2020-11-18
      回复
    • 困困的囡囡
      困困的囡囡
      2020-11-18
      将数据设置为空之后再复制就没有问题了,但是将数据设置为空时界面闪烁
      2020-11-18
      回复
    • 青人长弓
      青人长弓
      2022-02-09
      请问解决了吗?
      2022-02-09
      回复
    • 困困的囡囡
      困困的囡囡
      2022-03-04回复青人长弓
      已解决,在组件中不好赋值
      2022-03-04
      回复
登录 后发表内容
问题标签