vuex的使用

    xiaoxiao2024-12-24  55

    1:(获取state的方法一)

    1-1:这是在state.js文件下定义的。

    //根状态 const state = { appName: 'admin', stateValue: 'abc' } export default state

    在state.js文件定义的属于根状态,可以全局访问使用 this.$store.state.appName

    1-2:在模块下的状态如何获取和使用

    这时候要使用 this.$store.state.user.userName 来获取  意思就是获取store的state下模块名下(user)的状态名(userName) 

    2:(获取state的状态方法二)

    import { mapState } from 'vuex' //相当于以下写法 //import vuex from 'vuex //const mapState = vuex.mapState computed: { //利用...展开操作符,相当于引入 //状态数组形式用法 ...mapState({ appName }) //状态对象用法 ...mapState({ appName: state => state.appName, userName: state => state.user.userName,//模块下的状态 }), } //对于模块下的状态我们还可以使用定义模块名的方式来使用(这是模块增加了命名空间的时候使用) ...mapState('user',{ userName:state=>state.userName })

    3:getter的使用(类似与计算computed)

    import {mapGetters } from 'vuex' appNameWithVersion () { return this.$store.getters.appNameWithVersion },

    模块下的getters可以直接使用(除了命名空间下的)

    4:mutations的使用(只能作同步操作)

    methods: { ...mapMutations([ 'SET_USER_NAME', 'SET_APP_NAME', 'SET_STATE_VALUE' ]), changeUserName () { // this.$store.commit({ // type: 'SET_APP_NAME', // appName: 'newAppName' // }) // this.SET_APP_NAME({ // appName: 'newAppName' // }) // this.$store.state.user.userName = 'haha' 错误的方法 this.SET_USER_NAME('vue-cource') }, }

    5:actions(异步操作)

    import { getAppName } from '@/api/app' const actions = { // updateAppName ({ commit }) { // getAppName().then(res => { // const { info: { appName } } = res // commit('SET_APP_NAME', appName) // }).catch(err => { // console.log(err) // }) // } async updateAppName ({ commit }) { try { const { info: { appName } } = await getAppName() commit('SET_APP_NAME', appName) } catch (err) { console.log(err) } } } export default actions ...mapActions([ 'updateAppName' ]),

     

    最新回复(0)