vue.js - 我如何使用 Vuex 获取和设置值?

标签 vue.js vuejs2 vuex vue-router

我是 Vue 新手,这是我第一次使用 Vuex,所以这可能完全是我的误解。

我有一个页面有 2 个 DatePicker,当用户选择值时,该页面应该将这些值传递到另一个页面,该页面将向 WebService 发送 POST。我读到要做到这一点,我需要使用 Vuex,所以我尝试了,但我无法将我的 var 的值设置为 Vuex var。 这是我的代码:https://codesandbox.io/s/y0ovmqrqlv

这是我尝试设置值的代码(存在于 Data.vue 中):

methods: {
getDatePrimeiro(primeiraDataPassada) {
  var dataUm = primeiraDataPassada;
  this.primeiraData = new Date(
    dataUm.getTime() - dataUm.getTimezoneOffset() * 60000
  )
    .toISOString()
    .split("T")[0];
  console.log(this.primeiraData);
},
getDateSegundo(segundaDataPassada) {
  var dataDois = segundaDataPassada;
  this.segundaData = new Date(
    dataDois.getTime() - dataDois.getTimezoneOffset() * 60000
  )
    .toISOString()
    .split("T")[0];
  console.log(this.segundaData);
  this.retornar;
}
  },

computed: {
    retornar() {
      console.log("Entrou função", this.primeiraData, this.segundaData)
      this.$store.state.primeiraData = this.primeiraData;
      this.$store.state.segundaData = this.segundaData;
    }
  }

请帮助我。

最佳答案

您需要 getters、mutations、actions 等。像您当前所做的那样设置商店的变量是错误的。

以下是如何更新商店中的变量的示例。如果您有以下变量:

const defaults = {
  loading: true
}

然后您需要在商店中使用一个函数来改变该数据,如下所示:

export default {
  namespaced: true,
  state: Object.assign({}, defaults),
  mutations: {
    updateLoading(state, loading) {
      state.loading = loading
    }
  },
  actions: {
    updateLoading({ commit }, loading) {
      commit('updateLoading', loading)
    }
  }
}

为了从组件调用此操作(这将改变数据),您可以通过多种方式来完成 - 我个人的偏好是这样的:

<template>{{some stuff}}</template>

<script>
import { createNamespacedHelpers } from 'vuex'

// Change out 'common' for wherever your store is kept.
// I like to split out my store into modules to keep things separate
// In this case, I would have a file called /src/store/common.js
const { mapActions } = createNamespacedHelpers('common')

export default {
  ......... // name, components, data, etc
  methods: {
    ...mapActions(['updateLoading']),
    getData() {  // function which calls updateLoading
      this.updateLoading(true);
      ........ // do some stuff
      this.updateLoading(false);
    }
  }
}
</script>

<style>{{some style}}</style>

当然,如果您只是以线性流程将数据从一个页面传递到下一个页面,您始终可以使用 props/查询参数/cookies/其他内容来传递数据。 Vuex 很棒,但并不总是必要的(不过,在您的情况下是否必要取决于您)。

关于vue.js - 我如何使用 Vuex 获取和设置值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55122215/

相关文章:

javascript - 为什么这个函数在应该返回 true 的时候返回 false?

javascript - Vuejs 传递数据以从 ajax 请求中选择元素不是 react 性的

vue.js - 更改输入文本值vuex

javascript - Vee 验证在 vue 设置后获取先前的值

javascript - 在 vuex 存储中存储配置是一个好的做法吗?

vue.js - VueJS : router. 解决问题

typescript - 如何在 Vuetify 3 中导入 TypeScript 类型?

javascript - 在 Vue.js 中动态过滤对象数组

vue.js - 在 VueJS 中如何确定模板中元素的元素宽度

css - bootstrap-vue 改变 <b-modal> 的位置