收藏
回答

生命周期在wx:if下触发时机Bug

框架类型 问题类型 终端类型 微信版本 基础库版本
小程序 Bug 微信iOS客户端 6.5.3 2.12.2

子组件在标有wx:if的情况下子组件的触发是立即触发,而不是等条件成立后触发!

如以下代码示例,子组件的attached应该在2s后才会触发,但结果却立即触发。

代码片段:https://developers.weixin.qq.com/s/cjbrRum477kF

部分代码示例

// component/test.js
Component({
  /**
   * 组件的属性列表
   */
  properties: {
    name: {
      type: String,
      value: 1
    }
  },

  /**
   * 组件的初始数据
   */
  data: {
    show: false
  },

  lifetimes: {
    attached() {
      console.log('test component attached: ' + this.data.name + ' ' + Date.now())
      setTimeout(() => {
        this.setData({
          show: true
        })
      }, 2000)
    },
  },
  // 兼容
  attached() {
    console.log('test component attached: ' + this.data.name + ' ' + Date.now())
    setTimeout(() => {
      this.setData({
        show: true
      })
    }, 2000)
  },
})

// test.wxml
<slot wx:if="{{show}}" ></slot>

// 使用
<test name="1">
  <test name="2">
    嵌套测试
  </test>
</test>
最后一次编辑于  09-19
回答关注问题邀请回答
收藏

2 个回答

  • nobo
    nobo
    09-20

    将该组件放到淘宝小程序跑,输出结果是没问题的。

    09-20
    有用
    回复
  • 拾忆
    拾忆
    09-19

    测试了下没发现有问题

    09-19
    有用
    回复 11
    • nobo
      nobo
      09-19
      不会吧,我这手机及开发工具都一样的效果。
      09-19
      回复
    • 拾忆
      拾忆
      09-19回复nobo
      09-19
      回复
    • nobo
      nobo
      09-19回复拾忆
      https://developers.weixin.qq.com/s/cjbrRum477kF 你用这个跑下,这两个之间应该相隔2秒输出
      09-19
      回复
    • 拾忆
      拾忆
      09-19回复nobo
      打印的内容是加载后就直接显示了,因为你那个是放在延时2S外面,但是组件的show复制是没有问题的,正常在延时后显示。
      09-19
      回复
    • nobo
      nobo
      09-19回复拾忆
      这不对呀,子组件本来是要在2秒后创建的,但现在的执行反馈是生命周期立刻就执行了,如果在业务场景下应该是等待我的依赖数据完成后才可能执行attached的内容
      09-19
      回复
    查看更多(6)
登录 后发表内容
问题标签