关于vue3中watchEffect与watch的疑问

<template>
  <input v-model="value" type="text" @input="handleInputChange" />
</template>
setup() {
  const value = ref('')
  watchEffect(async onInvalidate => {
    console.log(value.value); // 初始化也会被监听到
    onInvalidate(() => {
      console.log('?');
    });
  });

  function handleInputChange() {
    let stopWatch: WatchStopHandle = () => {};
    if (value.value.length > 5) {
      stopWatch = watch(value, (val, preVal) => {
        console.log(`输入框老值:${val},新值:${preVal}`);
      });
    } else {
      stopWatch();
    }
  }

  return {
    value,
    handleInputChange
  };
}

代码如上所示,为什么在handleInputChange函数中else调用会走到watchEffect中的onInvalidate,难道一开始stopWatch不就是一个空函数吗?

阅读 1.8k
1 个回答
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题