gpt4 book ai didi

javascript - 如何在 Vuex 中设计一个商店来处理嵌套自定义组件中的点击?

转载 作者:行者123 更新时间:2023-11-28 18:14:58 26 4
gpt4 key购买 nike

我正在尝试设计一个商店来管理我的 Vuex 应用程序的事件。到目前为止,我有以下内容。

import Vue from "vue";
import Vuex from "vuex";
Vue.use(Vuex);

const state = { dataRows: [], activeDataRow: {} };
const mutations = {
UPDATE_DATA(state, data) { state.dataRows = data; state.activeDataRow = {}; },
};

export default new Vuex.Store({ state, mutations });

我将有许多列表项,单击这些列表项应该会更改存储中数据的值。根组件App和菜单栏Navigation的设计如下(最后会有一堆 Action 所以我把它们收集在文件< em>actions.js)。

<template>
<div id="app">
<navigation></navigation>
</div>
</template>
<script>
import navigation from "./navigation.vue"
export default { components: { navigation } }
</script>

<template>
<div id="nav-bar">
<ul>
<li onclick="console.log('Clickaroo... ');">Plain JS</li>
<li @click="updateData">Action Vuex</li>
</ul>
</div>
</template>
<script>
import { updateData } from "../vuex_app/actions";
export default {
vuex: {
getters: { activeDataRow: state => state.activeDataRow },
actions: { updateData }
}
}
</script>

单击第一个列表项会在控制台中显示输出。然而,当单击第二个时,没有任何反应,所以我很确定该事件根本没有被调度。渲染页面时我还看到以下错误:

Property or method "updateData" is not defined on the instance but referenced during render. Make sure to declare reactive data properties in the data option.

我对 Vuex 很陌生,所以我只是猜测。我是否需要在存储中引用 updateData 操作以及状态突变?我怎么做?错误消息谈到的“数据选项”是什么/在哪里?这不是我的组件状态及其属性吗?

最佳答案

为什么会出错

您收到错误,因为当您有<li @click="updateData">时在模板中,它查找方法 updateData在 vue 组件中它找不到,所以它抛出错误。要解决这个问题,您需要在 vue 组件中添加相应的方法,如下所示:

<script>
import { updateData } from "../vuex_app/actions";
export default {
vuex: {
getters: { activeDataRow: state => state.activeDataRow },
actions: { updateData }
},
methods:{
updateData: () => this.$store.dispatch("updateData")
}
}
</script>

什么this.$store.dispatch("updateData")正在做的是调用你的 vuex 操作,如记录的 here .

“数据选项”是什么/在哪里

您没有定义任何数据属性,如果您只想在该组件中使用该数据属性,则可以使用 vue 组件的数据属性。如果您有需要跨多个组件访问的数据,可以使用vuex state正如我相信你正在做的那样。

以下是获取data properties的方法对于 vue 组件:

<script>
import { updateData } from "../vuex_app/actions";
export default {
date: {
return {
data1 : 'data 1',
data2 : {
nesteddata: 'data 2'
}
}
}
vuex: {
getters: { activeDataRow: state => state.activeDataRow },
actions: { updateData }
},
methods:{
updateData: () => this.$store.dispatch("updateData")
}
}
</script>

您可以在 View 中使用这些数据属性,有computed properies基于它,或创建 watchers关于它和许多more .

关于javascript - 如何在 Vuex 中设计一个商店来处理嵌套自定义组件中的点击?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40888482/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com