Vuejs2 如何在函数中使用vuex操作
我是Vue的新手,所以我可能误解了什么。我想在Vuejs2 如何在函数中使用vuex操作,vuejs2,vuex,Vuejs2,Vuex,我是Vue的新手,所以我可能误解了什么。我想在App.vue中的本地函数内调用vuex操作,如下所示: <template> <div id="app"> <button @click="runFunction(1)">Test</button> </div> </template> <script> import { mapActions } from 'vuex' export defau
App.vue
中的本地函数内调用vuex操作,如下所示:
<template>
<div id="app">
<button @click="runFunction(1)">Test</button>
</div>
</template>
<script>
import { mapActions } from 'vuex'
export default{
data() { return { } },
methods: {
...mapActions(['doAction']),
buttonClicked: (input) => { runFunction(input) }
}
}
function runFunction(input){
doAction({ ID: input });
}
</script>
我还有一个main.js来设置vue:
import Vue from 'vue'
import App from './App.vue'
import store from './store'
new Vue({
el: '#app',
store,
render: h => h(App)
})
我得到的错误是:
ReferenceError: doAction is not defined
at runFunction
如何在函数中调用映射动作?版本是Vue 2.6.10当然,它不是在您的实例之外定义的。。。。您必须从函数组件上的
store.js
导入导出的store
:
从“vuex”导入{mapActions}
从“store.js”导入存储
导出默认值{
data(){return{}},
方法:{
…映射操作(['doAction']),
按钮点击:(输入)=>{runFunction(输入)}
}
}
函数runFunction(输入){
提交({ID:input});
}
将运行函数定义为“本地函数”有几个问题:
函数runFunction(输入){
doAction({ID:input});
}
首先,这只是一个普通的JavaScript函数,通常适用范围规则doAction
需要在该函数可以看到它的地方定义。此函数与App.vue
中定义的组件之间没有神奇的联系。组件中的代码可以访问该功能,如单击的按钮
,但不能反过来访问
下一个问题是它在模板中不可用。在模板中编写runTemplate(1)
时,将查找this.runTemplate(1)
,尝试在当前实例上解析它。您的函数不在当前实例上。鉴于您的模板包含@click=“runFunction(1)”
我有点惊讶,您没有看到控制台错误警告,提示单击处理程序未定义
mapActions
使用this.$store
中保存的引用访问存储。将存储添加到新Vue({store})
时,将创建该引用。商店可能看起来很神奇,但实际上只是this.$store
,其中this
是当前组件
现在还不清楚为什么要在组件之外编写这个函数。最简单的解决方案是将其添加到方法中。然后它将可用于模板,您可以访问doAction
作为this.doAction
要将其作为一个单独的功能保留,您需要给它一些访问存储的权限。在不知道为什么要将其分离的情况下,首先不清楚如何最好地实现这一点。我在OP中没有提到这一点,但是在新Vue({el:'#app',store,render:h=>h(app)})中存储什么呢
在main.js
do then?@DavidStarkey中,vue实例的此
在导出
block@DavidStarkey新的Vue({el:'#app',store,render:h=>h(app)})这只是将导出的存储设置为实例存储,因此这个。$store=store
@DavidStarkey您是否尝试过该代码,但它不起作用?如果您打算直接使用该存储,我只是不确定执行操作和使用mapActions
的意义何在。为什么不在这一点上执行store.state.IDs.push
呢?实际上,它没有理由成为一个单独的函数,除非在实践中它会有点长。我尝试将其更改为按钮单击:(输入)=>{this.doAction({ID:input});}
并得到TypeError:_this.doAction不是一个函数
@davidstrarkey这是因为您使用的是箭头函数。它应该是按钮点击(输入){this.doAction({ID:input})}
,就是这样。我开始明白了。
ReferenceError: doAction is not defined
at runFunction