首页 » js ▪ html5

uniapp中使用vuex(store)模块,

   发表于:js ▪ html5评论 ()   热度:223

定义模块

定义模块有很多方式,这里在store目录里新建了一个名叫user.js的文件,详看代码注释。

//本地存储的key
const USER_KEY = 'userinfo';

const state = {
  //初始化数据,优先从本地存储获取
    userInfo : uni.getStorageSync(USER_KEY) || {},
}

//actions可以支持异步操作,这里使用异步存储,存储成功后再commit
const actions = {
    setUserInfo({commit},payload) {
        uni.setStorage({
            key:USER_KEY,
            data:payload,
            success: () => {
                commit("set_userinfo",payload);
            }
        })
    },
};
//真正的缓存数据改变的地方
const mutations={
    set_userinfo(state,data){
        state.userInfo = data;
    },
}
//导出
export  default {
    state,
    actions,
    mutations
}

模块注册

修改index.js文件引入模块并注册

import Vue from 'vue'
import Vuex from 'vuex'
//导入模块
import user from './user'
Vue.use(Vuex)

const store = new Vuex.Store({
    state: {
    },
    
    modules:{
        //注册模块
        user,
    }
})

export default store

如何使用

<script>
    import {mapActions, mapState} from 'vuex'
export default {
        computed: {
            ...mapState({
                // 这里可以通过这种方式引用相应模块的state数据,其中user是模块名。
                // 在代码的其他部分可以使用this.userInfo访问数据
                userInfo: ({user}) => user.userInfo,
            }),
        },
        data() {
            return {};
        },
        methods:{
            /* 这里是导入模块的actions,其中setUserInfo是我们在user模块中定义的。
注意,中括号是必须的。当要导入多个的时候可以在中括号中添加,以数组的形式传给mapActions。
在代码中我们就可以this.setUserInfo的方式访问在vuex中的函数。*/
            ...mapActions(['setUserInfo']),
        },
        onLoad(){}
    }
</script>

 

(。・v・。)
喜欢这篇文章吗?欢迎分享到你的微博、QQ群,并关注我们的微博,谢谢支持。