当前位置: 首页 > 知识库问答 >
问题:

Vue-Vuex:从子组件调用操作时存储不更新

公羊向荣
2023-03-14

为此我要拔头发。我是一个Vue新手,并试图建立一个用户选择器。

User Selector组件是一个子组件,它应该显示vuex存储中的所有用户,然后我有一个@change处理程序来更新vuex存储中的currentUser变量。

我认为我正确地使用了动作和突变,但由于某些原因,它不会将currentUser设置为有效负载。

用户选择器。vue

<template>
  <select class="user-selector" v-model="currentUser" @change="handleChange($event)">
    <option v-for="user in users" :key="user" :value="user">User {{ user }}</option>
  </select>
</template>

<script>
export default {
  name: "UserSelector",
  methods: {
    handleChange(event) {
      this.$store.dispatch("setCurrentUser", event.currentTarget.value);
    }
  },
  computed: {
    users() {
      return this.$store.getters.users;
    },
    firstUser() {
      return this.users[0];
    },
    currentUser: {
      get: function() {
        return this.$store.getters.currentUser;
      },
      set: function(newCurrentUser) {
        this.$store.dispatch("setCurrentUser", event.currentTarget.value);
      }
    }
  },
  updated() {
    const { firstUser } = this;
    if (firstUser) {
      this.$store.dispatch("setCurrentUser", firstUser);
    }
  }
};
</script>

我的store.js如下:

import Vue from "vue";
import Vuex from "vuex";

Vue.use(Vuex);

export default new Vuex.Store({
  state: {
    todos: {},
    users: [],
    currentUser: 0
  },
  getters: {
    todos(state) {
      return state.todos;
    },
    users(state) {
      return state.users;
    },
    currentUser(state) {
      return state.currentUser;
    }
  },
  mutations: {
    setTodos(state, payload) {
      state.todos = { ...payload };
    },
    setUsers(state, payload) {
      state.users = [...payload];
    },
    setCurrentUser(state, payload) {
      state.currentUser = payload;
    }
  },
  actions: {
    setTodos(context, payload) {
      context.commit("setTodos", payload);
    },
    setUsers(context, payload) {
      context.commit("setUsers", payload);
    },
    setCurrentUser(context, payload) {
      context.commit("setCurrentUser", payload);
    }
  }
});

有人能告诉我我做错了什么吗?如果我能安慰你。将有效负载记录在setCurrentUser中,但在调用

state.currentUser = payload

状态中当前用户的值保持为其默认值,即0。当我用Vue dev工具调试时,我还可以看到状态中的当前用户保持不变。

请帮忙!

共有1个答案

楚浩然
2023-03-14

我认为v-model@change手柄之间存在冲突。请尝试将v-model更改为:value,并删除计算中的get set

<select class="user-selector" :value="currentUser" @change="handleChange($event)">
  <option v-for="user in users" :key="user" :value="user">User {{ user }}</option>
</select>

  computed: {
    currentUser: {
      return this.$store.getters.currentUser;
    },
  },
 类似资料:
  • 我想做一个简单的Vuex应用程序,这里是我的文件: main.js 应用程序。vue 此外,我正在使用vue路由器: 在初始化主存储之后。js和应用程序中的注入。vue组件对此进行了测试$在应用程序中存储变量。vue未定义;但同时在主要方面。一切都好。 还试图从商店A导入pp.vue(后来我在商店中存储商店/index.js)制作新的商店,而不改变状态main.js.

  • 我不明白为什么不更新我的对象。在另一个组件中,我通过调度更新状态。在此情况下(在下面的代码中),mapStateToProps类别中的代码正在更改(控制台日志显示另一个类别)。但组件并没有重播,虽然在组件中我使用了道具。类别。事件控制台。登录元素未运行 我认为,如果我更新状态,则根据该状态更新组件。它应该如何工作?它应该如何工作?它可能很有用,添加类别的项不是父项或子项,而是邻居 谢谢你解决问题。

  • 所以,每次vuex中的状态不为null时,我都试图更新组件中的一些数据。我用laravel设置了一个API路由,在用户登录后返回用户信息。 API路线: Vuex: 所以在我的应用程序中。vue,在created方法中,如果令牌存在,我将使用http响应作为有效负载提交SET_AUTH_USER。 应用程序。vue: 到目前为止,一切正常。每次我刷新页面,只要我的本地存储中有一个令牌,用户对象将永

  • 本文向大家介绍Vue父组件调用子组件事件方法,包括了Vue父组件调用子组件事件方法的使用技巧和注意事项,需要的朋友参考一下 Vue父组件向子组件传递事件/调用事件 不是传递数据(props)哦,适用于 Vue 2.0 方法一:子组件监听父组件发送的方法 方法二:父组件调用子组件方法 子组件: 父组件: 以上这篇Vue父组件调用子组件事件方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希

  • 我在vue文件中的“方法”中有这个 我得到以下错误:未捕获(在promise中)TypeError:无法读取未定义的属性'$store'