vue.js - 使用 vuex-map-fields 映射计算字段

标签 vue.js vuejs2 vuex

我有一个关于使用 vuex-map-fields 映射计算字段的问题。

我有一个 Vuex 商店:

export const state = () => ({
  countryCode: null,
  phoneNumber: null,
  phone: null
})

表单有两个输入字段:countryCodephoneNumber。我希望 phone 值将根据 countryCodephoneNumber 进行更新。

如何解决vuex-map-fields的问题?

最佳答案

基于vuex-map-fields README ,编辑您的商店设置以使用 vuex-map-fields 中的 getField getter 和 updateField 突变:

// store.js
import { getField, updateField } from 'vuex-map-fields'

export default new Vuex.Store({
  //...
  state: {
    countryCode: '',
    phoneNumber: '',
  },
  getters: {
    getField,
  },
  mutations: {
    updateField,
  },
})

...然后您的组件将使用 vuex-map-fields 中的 mapFields:

<template>
  <div id="app">
    <input v-model="countryCode">
    <input v-model="phoneNumber">
  </div>
</template>

<script>
import { mapFields } from 'vuex-map-fields';

export default {
  //...
  computed: {
    ...mapFields([
      'countryCode',
      'phoneNumber',
    ]),
  },
}
</script>

要从其他两个状态变量计算phone,您可以使用Vuex getter格式化它:

// store.js
const store = new Vuex.Store({
  //...
  getters: {
    phone: state => `${state.countryCode}-${state.phoneNumber}`
  },
})

...然后使用 Vuex's mapGetter在您的组件中显示 phone:

<template>
  <div>
    <pre>phone: {{ phone }}</pre>
  </div>
</template>

<script>
import { mapGetters } from 'vuex'

export default {
  //...
  computed: {
    ...mapGetters(['phone'])
  }
}
</script>

总而言之,您的组件看起来类似于:

<template>
  <div>
    <input v-model="countryCode" type="number">
    <pre>countryCode: {{ countryCode }}</pre>
    <input v-model="phoneNumber" type="tel">
    <pre>phoneNumber: {{ phoneNumber }}</pre>
    <pre>phone: {{ phone }}</pre>
  </div>
</template>

<script>
import { mapFields } from 'vuex-map-fields'
import { mapGetters } from 'vuex'

export default {
  computed: {
    ...mapFields(['countryCode', 'phoneNumber']),
    ...mapGetters(['phone'])
  }
}
</script>

Edit Using vuex-map-fields

关于vue.js - 使用 vuex-map-fields 映射计算字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59816698/

相关文章:

vue.js 结构化应用布局

javascript - 我可以使用 HTML/CSS 和 javascript 创建一个登录页面,然后再向其中添加 VUE 吗?

javascript - 如何使用 Javascript 和 VUE 获取换行符

vue.js - 我可以在 Vuex 存储中拥有多个状态吗?

vue.js - Vue - API 调用属于 Vuex 吗?

javascript - Vuejs-nuxt(SSR 模式)无法通过插件内部的 getter 获取 UserUUID。它显示未定义的 GetUserUUID

vue.js - Vue 最佳实践, Prop 对象或原始类型?

javascript - Vue.js - 如何将数据传递到另一条路线?

javascript - 在 v-bind 中访问 Vuex

javascript - Vuex 状态不会被通用函数改变,而专用函数会改变它