自定义组件初始化时因为默认值不同导致 prop 的 observer 被调用
发布于 6 年前 作者 dumin 8458 次浏览 来自 问答

- 当前 Bug 的表现(可附上截图)

在自定义组件 Component 的 properties 中定义 prop 的缺省值以及 observer 函数。

当使用该组件需要初始化该组件时,若 prop 接收外部传入的实参与该 prop 的默认值不相等时,会导致 observer 被立即调用一次。

- 预期表现

prop 的缺省值应该是组件未接收到外部传参时,使用的缺省值作为默认值,这属于组件初始化工作,不应该视为 prop 发生了变化。

所以当组件初始化时,如果 prop 接收的外部传参与缺省值不相等时,不触发 observer 调用是不是更合理一点?

- 提供一个最简复现 Demo

代码片段:wechatide://minicode/8SCwknmx7D3z

2 回复

设计如此。这里的用意是,只要任何属性值与组件自身设定的初始值不同,observer 就一定会触发。

设计上的原因是,有时很难界定你在问题中所说的“初始化”阶段。组件的属性值可能因为父组件传参变化,而父组件的传参又可能因为它的父组件传参而发生变化,而且这种变化可能发生在任何时候,比如组件被插入到父节点的时候,可能发生的事情包括触发 attached 、触发 relation linked 等,而这些又可能会有连锁的反应。很难划线说哪个点之前算“初始化”。

目前这种设计的好处是,如果有其他 data 字段随着这个属性变化,可以轻易处理。之后我们也会继续沿着这个方向来扩展。

回到顶部