在 Vue 3 设置中导入函数

Posted

技术标签:

【中文标题】在 Vue 3 设置中导入函数【英文标题】:Importing a function in Vue 3 setup 【发布时间】:2021-05-15 17:06:20 【问题描述】:

目前,我试图在我的 Vue 组件中调用一个节流/去抖动函数,但每次调用它时都会调用 Uncaught TypeError: functionTD is not a function si throw 这里是我的代码。

useThrottleDebounce.ts

import  debounce, throttle  from "lodash";
import  ref, watch  from "vue";

export const useThrottleDebounce = (tTime = 2000, dTime = 1000) => 
  const tRef = ref<any>(null);
  const tFunc = ref<any>(null);
  const tDHook = ref<any>(null);

  const debounceThrottle = debounce(() => 
    if (tRef.value) 
      tRef.value.cancel();
    
    tRef.value = throttle(tFunc.value, tTime)();
  , dTime);

  const throttleDebounceCreator = () => 
    return (func: any) => 
      tFunc.value = func;
      debounceThrottle();
    ;
  ;

  watch(() => tDHook.value, () => 
    tDHook.value = throttleDebounceCreator();
  );

  return tDHook;
;

export default useThrottleDebounce;

这是在我的组件中的 setup 中调用它的时候

setup()
   // some code
   const functionTD = useThrottleDebounce(2000, 500);
   const inc = () =>       
      functionTD (() =>      
        count.value++; // here throw error
      );
    ;

【问题讨论】:

const function = useThrottleDebounce(2000, 500); 是非法的 javascript。您不能在 JavaScript 中为任何保留字命名常量,function 就是其中之一。如果您需要帮助,请提供 runnable minimal reproducible example,包括实施和您想要实现的目标。 我只是更新代码函数名 这还不够。您没有展示如何使用它,也没有描述应该发生的事情与当前发生的事情。如果我运行上面的代码,我不会收到您描述的错误。你是如何使用你的函数的? @tao 该函数正在使用,如最后一个代码 sn-p 所示 【参考方案1】:

问题是useThrottleDebounce 不返回函数,因此functionTD 不是函数:

export const useThrottleDebounce = (tTime = 2000, dTime = 1000) => 
  // Maybe you want some private variables / functions here
  return () => 
    // This will be `functionTD` in `setup`
  

【讨论】:

以上是关于在 Vue 3 设置中导入函数的主要内容,如果未能解决你的问题,请参考以下文章

在 vue 3 中导入组件

在 vue 3 中导入 bootstrapVue

在 vue 3 中导入 bootstrapVue

如何在 Vue+webpack+vue-loader 项目中从不同的 js 文件中导入函数

如何在 vue 3 (Danfo.js) 中导入 NPM 包

Vuex使用