小程序组件页面刷新问题

1.A页面点击跳转到B页面,在B页面操作后A页面应该发生变化,但是实际上我们点击返回的时候我们发现并没有刷新,通过小程序的生命周期函数由onLoad(页面加载)、onReady(页面初次渲染完成)、onShow(页面显示)、onHide(页面隐藏)、onUnload(页面卸载)五个周期构成。

问题:如果在onShow中执行this.onLoad(),会导致页面第一次加载的时候数组加载两次!

原因:页面加载先执行onLoad,再执行的onShow,就会出现在onLoad加载一次数据,在onShow中执行this.onLoad()在加载一次数据。

解决方案:将不需要刷新的数据放在onLoad中执行,将需要刷新的数据放在onShow中执行!

2.对于组件的生命周期没有onLoad()、onShow()生命周期的页面,怎么对带有组件页面的进行页面刷新操作?

点击A页面(带有组件),进入B页面,在B页面操作完成后,同样回退到A页面时,我们对A页面的数据进行刷新操作。

组件:

HTML:

<custom-component>

 <view wx:for="{{list}}"> {{item}} </view>

</custom-component>

JS:

Component({
    data: {
      list: []
    },
    ready: function() {
      this.getData();
      console.log('ready')
    },

    methods: {
      getData() {
        console.log("刷新数据")
        var num = Math.floor(Math.random() * 10 + 1);
        this.setData({
          list: num
        })
      }
    }
  })

解决方案一:

在页面上添加一个参数 showCom, 同时在onShow()中修改 showCom 来渲染WXML页面实现页面刷新

解决方案二:

在Page 页面中,给页面添加ID,通过selectComponent获取到组件,同时调用更新组件的方法

A.WXML

<my-component my-property="example" id="test" wx:if="{{showCom}}" bindtap="click" />

A.JS

data: {
    showCom: true
  },

  onShow() {
    /*******方法一*******/
    this.setData({
      showCom: false
    });
    this.setData({
      showCom: true
    });
    /**********方法二**********/
    this.selectComponent("#test").getData();
  },

猜你喜欢

转载自blog.csdn.net/qq_36437172/article/details/82692682
今日推荐