如何忽略effect()初始执行?仅在信号第二次变更时触发逻辑
实现effect仅在信号二次及之后变更时执行的方案
现有代码如下:
effect(() => { console.log(`Value is ${newValue()}`); });
需求是让console.log只在信号第二次及之后变更时触发,跳过初始设置时的首次执行。
你提到的私有字段方案完全可行
用组件私有字段initialRun控制的写法没问题,示例代码如下:
class YourComponent { #initialRun = true; setup() { effect(() => { const currentValue = newValue(); if (!this.#initialRun) { console.log(`Value is ${currentValue}`); } this.#initialRun = false; }); } }
更轻量的闭包实现方式
如果不想给组件加私有字段,用effect内部的闭包变量就能搞定,更简洁且不污染组件实例:
effect(() => { let isFirstRun = true; const currentValue = newValue(); if (!isFirstRun) { console.log(`Value is ${currentValue}`); } isFirstRun = false; });
额外提示
如果使用的响应式框架/库的effect提供了跳过初始执行的配置项(类似部分库的skipInitial参数),直接配置即可,这是最省心的方式。如果没有这类配置,上面两种方法都能满足需求。
内容的提问来源于stack exchange,提问作者tlt
相关产品推荐
相关产品推荐

