微信小程序自定义组件传值无效问题

问题详情
  • 在学习微信小程序的时候,有一个自定义组件stars,用于处理用户的评分.这个组件传入接口获取到的数据,然后经过一系列转换显示相应的分数和对应的星星个数.如果没有评分,则显示未评价的信息.预期效果如下
    在这里插入图片描述
  • 但是在数据传递之后,发现有一部分组件的数据能正确渲染,但是有一部分的数据却始终显示未评价的样式,查看appData可以看到接口数据是正确返回的,那么问题出现在哪里呢,下面让我们一探究竟.错误样式如下(也就是传递了数据无法正确计算渲染)
    在这里插入图片描述
问题分析
  • 首先确认,接口拿到的数据是正确的
  • 其次,确认组件的 properties 类型正确,可以正确接收到传入的属性.这时可以在 attached 生命周期中打印 this.properties.xxx来查看是否正确接收
  • 既然可以正确接收到数据,为什么渲染时会出错呢?其实这涉及到组件生命周期的一点小问题.
  • 我们在获取数据的时候,通常都是在Component 的 attached 生命周期中获取并计算的,而 attached 生命周期是在组件实例进入页面节点树时执行,那么这时我们就需要考虑一个问题.我们是数据是在组件实例进入页面节点树时就已经拿到了还是在进入页面节点树之后呢?如果组件实例在进入页面节点树的时候数据还没有拿到,那么组件是不会等待数据的,而是会依据已经设定的默认值来显示.而在上述问题中,组件传入的数据是通过接口异步获取的,数据的获取势必会需要耗费一定的时间,虽然不一定很久,但是可能在此期间组件就已经被加载渲染了,所以就会出现上面未评分的情况
问题解决
  • 那么了解了问题的本质所在,我们就可以利用 properties 定义时的 observer 属性来解决这个问题.

  • observer 属性是属性值变化时的回调函数,也就是说,无论什么时候,只要传递的属性变化了,就会触发这个回调函数.那么我们就可以在这个回调函数中手动改变它的值,从而能让数据正确显示

    rate: {
      type: Number,
      value: 0,
      observer: function(newVal, oldVal) {
        this.updateRate()		//这里通过this.updateRate()方法来更新数据
      }
    }
    
总结
  • 在开发中注意生命周期函数的使用,熟悉各个生命周期页面的变化,这种问题就可以迎刃而解了
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值