vuex为什么Actions方法中加载的数据,渲染时getter经常取不到?如何保证渲染前先拿到数据?

发布于 2022-09-12 02:06:20 字数 1310 浏览 52 评论 0

Vuex:

export default {
    state: {
        enum_dict:{}
    },
    mutations: {
        getDicData(state,data){
            state.enum_dict[data.dicCodes] = data.res
        }
    },
    actions: {
        getDicData(context,dicCodes){//空则取后台数据
            for(let i=0;i<dicCodes.length;i++){
            if(context.state.enum_dict[dicCodes[i]]==undefined){
                    let param={enum_id:dicCodes[i]}
                    //调用axios查询数据
                    api.menu.getEnumValue(param).then((res) => {
                        context.commit('getDicData',{dicCodes:dicCodes[i],res:res.data});
                    })
                }
            }   
        }
    }
}

然后在vue页面中created中(或者在mounted中)调用actions:

created(){
        this.$store.dispatch('getDicData',["staff_level"])
    },

在computed中获取值:

computed: {
        staff_level () {
            return this.$store.getters.getEnum("staff_level")
        },

Vue文件中用的是element的el-table,column上配置了一个formatter:
其中会使用获取的值,但是经常取到的是undefined。

enumFormatter: function(row,column,cellValue,index){
            console.log(JSON.stringify(this.staff_level))
            。。。

也就是说,无法保证渲染前,数据总是能够被加载完成。请问vuex异步加载到底应该怎么办呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

不一样的天空 2022-09-19 02:06:20

找到了一个例子,原来异步需要在回调里处理才能保证取到后再执行:
https://segmentfault.com/a/11...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文