收藏
回答

自定义组件并没挂载到DOM上,但生命周期触发了

问题模块 框架类型 问题类型 终端类型 微信版本 基础库版本
框架 小程序 Bug 微信iOS客户端 6.0+ 2.3.0+

// PageA.wxml

<ComponentA><ComponentB /></ComponentA>

//ComponentA.wxml

<slot wx:if="{{false}}" />

这个时候ComponentB没挂载到DOM上面,但是created、attached、ready生命周期都触发了。

最后一次编辑于  09-12
回答关注问题邀请回答
收藏

3 个回答

  • 小程序技术专员-binnie
    小程序技术专员-binnie
    09-16

    这个和是否挂在 dom 下没关系,只要在 shadowTree 下就会有生命周期触发

    com2 组件是写在 index.wxml 里的,也就是说属于 index 的 shadowTree 下,这里没有 wx:if 把它干掉,就肯定会有 com2 组件的生命周期触发。

    虽然最终生成的 composedTree 没有 com2 组件,但是 com2 组件在 index 的 shadowTree 下,所以也会有生命周期触发,这是一直都有的逻辑。

    09-16
    赞同
    回复 6
    • 朱德明
      朱德明
      09-16
      但是react、vue的自定义组件的生命周期的不是这样定义的喔=0=
      09-16
      回复
    • 朱德明
      朱德明
      09-16
      这样的话,如果我想在页面加个拦截器的话,代码就非常难写了😢
      09-16
      回复
    • 朱德明
      朱德明
      09-16
      或者你能提供一个方案解决一下我demo上的问题吗?我不希望触发com2的生命周期,但引用关系保持不变,即是index引用com1、com2
      09-16
      回复
    • 小程序技术专员-binnie
      小程序技术专员-binnie
      09-16回复朱德明
      把 wx:if 从 com1 组件的 slot 上移到 index 内的 com2 上就可以
      09-16
      回复
    • 朱德明
      朱德明
      09-16
      举个例子吧: com1是个检查用户是否有权限访问该页面的自定义组件。如果有,就渲染。那如果com1控制不了slot里面组件的生命周期。那我不就每个页面都得在com1外再写一大堆逻辑?
      09-16
      回复
    查看更多(1)
  • 社区技术运营专员-娇华
    社区技术运营专员-娇华
    09-12

    你好,麻烦提供出现问题的具体机型、微信版本号、系统版本号,以及能复现问题的代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html

    09-12
    赞同
    回复 18
    • 朱德明
      朱德明
      09-12
      https://developers.weixin.qq.com/s/sRucckmb7mbT
      09-12
      回复
    • 朱德明
      朱德明
      09-12
      这问题影响好大哦,过节都过不好了😢
      09-12
      回复
    • 社区技术运营专员-娇华
      社区技术运营专员-娇华
      09-12回复朱德明

      提供的代码片段有误,请确保能正常运行

      09-12
      回复
    • 朱德明
      朱德明
      09-12
      。。。我这边是正常能跑的喔。。。
      09-12
      回复
    • 朱德明
      朱德明
      09-12
      https://developers.weixin.qq.com/s/pnwtmkmJ7sbO
      09-12
      回复
    查看更多(13)
  • o0o有脾气的酸奶
    o0o有脾气的酸奶
    09-12

    不要命名成comN,如com1,com2....这种名字

    试试其他文件名,就好了估计


    不是所有的字母组合都可以用来命名文件或文件夹,有些字母组合是不可以命名文件或文件夹的,如aux、com1、com2、prn、con、nul、等。这些都是设备名,如果用这些字母组合,在window系统下会出现指定的设备名无效的错误提示。在xp系统下,没有任何提示,但是被重新命名的文件名保持之前的无变化。如果遇到这样的情况,可以尝试换一个字母组合来命名


    09-12
    赞同
    回复 4
    • 朱德明
      朱德明
      09-12
      应该不是命名的问题,我在实际项目里的自定义组件名字都是比较正常的,都会有这种问题
      09-12
      回复
    • o0o有脾气的酸奶
      o0o有脾气的酸奶
      09-12回复朱德明
      你不妨换个文件名,试试?
      09-12
      回复
    • 小程序技术专员-binnie
      小程序技术专员-binnie
      09-16回复朱德明
      windows下文件不能用com2命名
      09-16
      回复
    • 朱德明
      朱德明
      09-16
      算我怕了 文件名改了 再看看demo吧,还是有那问题 https://developers.weixin.qq.com/s/jzsKbqmk7cbv 怎么小程序这么多命名方面的潜规则的啊。。。
      09-16
      回复
问题标签