javascript - Lodash 的 _.debounce() 在 Vue.js 中不起作用
问题描述
我正在尝试运行一个在 Vue.js 中调用query()
的组件属性被修改时调用的方法。q
这失败了,因为this.query()
未定义。This
指的是我的组件的实例,但不知何故不包含方法。
这是我试图查看组件属性q
并运行query()
函数的相关代码部分:
methods: {
async query() {
const url = `https://example.com`;
const results = await axios({
url,
method: 'GET',
});
this.results = results.items;
},
debouncedQuery: _.debounce(() => { this.query(); }, 300),
},
watch: {
q() {
this.debouncedQuery();
},
},
错误:
类型错误:_this2.query 不是函数
debounce()
如果我按如下方式编写调用,则TypeError: expected a function
错误会在页面加载时更早出现。
debouncedQuery: _.debounce(this.query, 300),
解决方案
问题来自您在 中定义的箭头函数的词法范围_.debounce
。this
绑定到您在其中定义它的对象,而不是实例化的 Vue 实例。
如果您将箭头功能切换为常规功能,则范围已正确绑定:
methods: {
// ...
debouncedQuery: _.debounce(function () { this.query(); }, 300)
}
推荐阅读
- c++ - 此代码不比较输入。其中有什么问题?
- java - 向量循环的 Java 输入错误,直到正确为止
- typescript - 如何根据传递的参数获得函数响应?
- java - 如何检测 SELECT * 何时相同?
- apache - 如何使用 htaccess 将 PDF 链接重定向到具有相同 PDF 文件的不同域
- excel - 将行设置为设置数据源
- php - Paytm支付网关,启动交易模式php中的系统错误
- python - 尝试使用 python 读取多个数据帧以分析我的论文
- ios - 使用 react-native-splash-screen 时如何重构 AppDelegate.m 以仅加载应用程序一次?
- android - Google 登录身份验证在 Android Studio 中不起作用