在 Modal 中使用 Vuex Store 会在模态关闭后重置 store

Posted

技术标签:

【中文标题】在 Modal 中使用 Vuex Store 会在模态关闭后重置 store【英文标题】:Using Vuex Store in Modal resets the store after closing of modal 【发布时间】:2020-06-06 23:42:44 【问题描述】:

我正在使用 Nuxt 2.11 和“bootstrap-vue”2.5.0

我创建了一个商店,其中包含一个简单的列表和一个用于向该列表添加元素的 mutator。

// store/issues.js
export const state = () => (
  list: [],
)

export const mutations = 
  add(state, issue) 
    state.list.push(issue)
  ,

然后我创建了一个页面,其中包含所有条目的 for 循环和一个计算属性以从商店加载数据。

computed: 
  issues() 
    return this.$store.state.issues.list
  ,
,

如果我添加一个简单的按钮来显式添加一个项目,它将每次都添加并且一切正常

<b-btn @click="test">Add</b-btn>

test() 
  this.$store.commit('issues/add', 
    title: 'title',
  )
,

但是当我使用 bootstrap-vue-form 向商店提交新商品时,首先会添加该商品,但一秒钟后,整个商店被删除,我页面上的列表为空。

<b-form @submit="onSubmit" @reset="onReset">
  ...
</b-form>


onSubmit() 
  this.$store.commit('issues/add', this.issue)
,

【问题讨论】:

【参考方案1】:

如果您不希望页面在提交表单时重新加载,则需要防止发生原生表单提交:

<b-form @submit="onSubmit" @reset="onReset">
  ...
</b-form>


onSubmit(evt) 
  evt.preventDefault()
  this.$store.commit('issues/add', this.issue)
,

【讨论】:

我删除了preventDefault,因为我希望模式在提交后关闭。我忘了我必须用this.$bvModal.hide() 关闭模式。现在可以了!

以上是关于在 Modal 中使用 Vuex Store 会在模态关闭后重置 store的主要内容,如果未能解决你的问题,请参考以下文章

VUE - vuex state的使用

vuex学习---getters

Vuex 参数传递

vuex的基本使用

6. Vue 引入vuex store

vuex