Vue 复合使函数具有反应性?

Vue composite make function reactive?

是否可以创建一个复合函数,以便消费者可以提供对函数的引用?在 mixin 中,只要它存在,你就可以调用消费者方法。这是我认为这会起作用但不起作用的方法。 method1 不是反应性的。我意识到这可能是一种反模式。有时你 运行 一个 async/ajax 调用,一旦完成,最好只 运行 回调方法 1 而不是更改虚拟值并 运行 在它上面监视消费者。想法?

-- 消费组件

setup() {
  let { prop1, method1, method2 } = useComposite();

  method1 = (o) =>
  {
    console.log(o);
  };

  method2();
}

可组合函数 --

export default function useComposite()
{
  let method1 = ref(()=>{});
  const method2 = () => 
  {
    method1.value("hello");
  };
  const prop1 = ref(o);

  return {
   method1,
   methoid2,
   prop1,
  };
}

method1 已经是 ref 并按原样使用。如果它被重新定义,这应该像这样完成:

  method1.value = (o) => ...

这绝对是一个反模式。可以有多个回调,但仅限于一个。更完整的解决方案可以使用像 mitt 这样的事件总线并为事件注册处理程序。

具有组合 API 的适当解决方案将涉及观察者。这里不需要组合 API。它只是 callback-based 控制流程和 promise-based 流程的后退一步。如果 method2 是异步的,它需要 return 一个 promise 并被链接到它被使用的地方:

 const method1 = (o) => ...
 method2().then(method1);