zoukankan      html  css  js  c++  java
  • 记一次wepy里面的渲染问题(this.$apply()的使用)

    今天在用wepy搞小程序的时候遇到了一个小坑,卡了我好一会,因为之前在做React,所以对wepy的了解不是特别深入,所以导致了这个问题的发生

    先贴上来关键代码让大家看一看(备注之处是问题解决的方法)

    效果:

    我们可以看到刚进来时整个页面都没数据,但我点别的选项之后数据又会出来

    why?当时我真的是满脸懵逼啊,数据也获取到了就是第一次不渲染,给我急得差点把自己的头发都薅干净了

    经过我一番调试,发现他奶奶的checkStep里面的赋值附近有问题,当时我脑子一热把赋值改成了用setData()结果一点效果没有,用this.itemchecked赋值还是第一次不出来,

    在我即将把头发薅干净之际,我的大腿过来帮我看了一眼,轻飘飘的来了句你缺了this.$apply(),我日,我赶紧试了试,还真是

    !!!!!一切正常

    那为啥需要调用this.$apply()呢,

    可以看到methods里面的方法被bindtap调用之后触发了页面渲染,而当我在onLoad()里面调用时却没有触发页面渲染

    经过我一番搜索和查证得到以下结果:

    使用wepy框架写小程序,data赋值这里不需要使用this.setData({}),例如:data:{x:''1"},

    比如data里面你定义了一个x='',然后你在自定义的方法里面用this.x=200 之后,需要用this.$apply()来进行数据绑定。这样你在view中绑定data中的x变量时,才会有200,不然就是空

    (特别注意:)

    不过有个前提,method里面的方法是不用这个的,但methods里面只能放bindtap这类方法,所以你自己定义的其他方法,或者写在onshow里面,就必须得用this.$apply()。

     

    this.$apply()使用场景:

      1.异步更新数据

      2.手动刷新DOM

     

    哈哈哈,有一个小坑被我踩过了,美滋滋!

  • 相关阅读:
    [Android编程心得]Debug的一些技巧
    理解WebKit和Chromium: Chromium for Android
    java compiler level does not match the version of the installed java project facet
    [Android编程心得]Activity的生命周期函数
    GDAL中的SURF算法
    SURF算法学习心得
    遥感图像处理流程
    软件界面建模浅析
    IsPostBack深入探讨
    自定义应用程序配置文件(app.config)
  • 原文地址:https://www.cnblogs.com/suihang/p/10470174.html
Copyright © 2011-2022 走看看