如何更新 Vuex 状态? (MEVN 堆栈)

Posted

技术标签:

【中文标题】如何更新 Vuex 状态? (MEVN 堆栈)【英文标题】:How to update Vuex state? (MEVN stack) 【发布时间】:2022-01-14 14:04:46 【问题描述】:

我正在做一个学校项目,目前我正在尝试 Vuex,我想从 Vuex 检索研讨会列表,但我似乎无法更新我的状态。

这是我的 Node 后端:

router.get('/all', (req, res) => 
    Workshop.find()
        .then( workshop => 
            return res.status(201).json(
                workshop: workshop,
                success: true
            )
        )
        .catch( err => 
            console.log(err)
        )
)

这是我在 Postman 中的结果:

这是我的 Vuex 商店:

import axios from 'axios'

const state = 
    workshop: 


const getters = 
    workshop: state => state.workshop


const actions = 
    async getWorkshop( commit ) 
        let res = await axios.get('http://localhost:5000/api/workshops/all');
        commit('workshop_success', res.data.workshop);
        return res.data.workshop;
    
;

const mutations = 
    workshop_success(state, workshop) 
        state.workshop = workshop
    
;

export default 
    state,
    getters,
    actions,
    mutations

这是我的组件:

<template>
    <p> workshop </p>
</template>

<script>
import  mapGetters, mapActions  from 'vuex'

export default 
    computed: 
        ...mapGetters(['workshop'])
    ,
    methods: 
        ...mapActions(['getWorkshop'])
    ,
    created() 
        this.getWorkshop
    ,

</script>

问题是,我可以通过 Vuex 获取车间状态,它显示一个简单的空对象“”(这是初始状态),但似乎我无法通过 created 触发动作钩子,并且状态不会改变。如果有人知道我做错了什么,那将非常有帮助,因为我现在真的迷路了。提前谢谢!

【问题讨论】:

【参考方案1】:

state 不是状态,而是突变等参数中的上下文对象。否则无法访问commit等。

它是:

workshop_success( state , workshop) 
    state.workshop = workshop

这也是无操作:

created() 
    this.getWorkshop
,

应该像this.getWorkshop() 这样调用函数。

【讨论】:

以上是关于如何更新 Vuex 状态? (MEVN 堆栈)的主要内容,如果未能解决你的问题,请参考以下文章

如何更新 vuex 中的状态? Vue.js 2

当 vuex 商店的值发生变化时,如何更新组件中的状态?

vuex中为啥更新其中一个状态的值还能同步更新另一个状态的

如何使用状态 UPDATE_ROLLBACK_COMPLETE 更新 CloudFormation 堆栈?

如何在 Vuex 中通过 POST 请求发送状态数据?

如何在单独的非 Vue 组件、JavaScript/TypeScript 文件中访问 Vuex 状态?