基础库 2.17.3 及以上版本支持,2.17.3 以下和未配置的效果相同
在使用如 分包异步化 或 用时注入 等特性时,自定义组件所引用的其他自定义组件,在刚开始进行渲染时可能处于不可用的状态。此时,为了使渲染过程不被阻塞,不可用的自定义组件需要一个 「占位组件」(Component placeholder)。基础库会用占位组件替代不可用组件进行渲染,在该组件可用后再将占位组件替换回该组件。
一个自定义组件的占位组件可以是另一个自定义组件、或一个内置组件。
页面或自定义组件对应的 JSON 配置中的 componentPlaceholder
字段用于指定占位组件,如:
{
"usingComponents": {
"comp-a": "../comp/compA",
"comp-b": "../comp/compB",
"comp-c": "../comp/compC"
},
"componentPlaceholder": {
"comp-a": "view",
"comp-b": "comp-c"
}
}
该配置表示:
- 组件
comp-a
的占位组件为内置组件view
- 组件
comp-b
的占位组件为自定义组件comp-c
(其路径在usingComponents
中配置)
假设该配置对应的模板如下:
<button ontap="onTap">显示组件</button>
<comp-a wx-if="{{ visible }}">
<comp-b prop="{{ p }}">text in slot</comp-b>
</comp-a>
小程序启动时 visible
为 false
,那么只有 button
会被渲染;点击按钮后,this.setData({ visible: true })
被执行,此时如果 comp-a
, comp-b
均不可用,则页面将被渲染为:
<button>显示组件</button>
<view>
<comp-c prop="{{ p }}">text in slot</comp-c>
</view>
comp-a
与 comp-b
准备完成后,页面被替换为:
<button>显示组件</button>
<comp-a>
<comp-b prop="{{ p }}">text in slot</comp-b>
</comp-a>