Vuex4

说明

注意:匹配vue3

vuex:vue前端开发可能使用的一个模块,用于存储并管理共享状态,所有共享状态和定义的操作方法均封装于store对象中;虽不使用vuex也可实现,但需要状态逐层传递十分麻烦,而且高耦合。vuex相当于共享空间,组件将共享状态存与vuex,想要访问直接在vuex中取便可;此外vuex自动将store实例“注入“到了所有组件中。通过this.$store便可直接访问

官方文档:https://vuex.vuejs.org/zh/guide/

注意:不可存直接存num数据(num:1 ,不可,改不了值)

1. Vuex常用方法

说明
createStorestore创建工厂,用于对store默认值进行配置
useStore获取store属性

2. Store属性

store:vuex中的属性,用于存储共享状态,定义调用操作共享状态的函数等。可通过useStore,createStore或直接this.$store获取

Store核心属性

属性作用
state单一状态树,存所有共享状态
getters在vuex中对共享状态进行函数操作,return的结果以计算属性形式存在(vue3.0版本不是,vue3.1版本会修复),(没测试过是否会更改共享状态的值)
mutations在vuex中对共享状态进行方法操作(无返回),更改共享状态的值
actions在vuex中调用mutation
modules局部化状态,当有大量共享对象时,均存于同一state时,该对象变得十分臃肿。这是可使用module将共享对象分模块;其内同样有state,getters…。
(子模块对父模块中属性/对象有继承关系)

3. 安装

npm install vuex@next --save

4. 配置文件格式

  • 文件名:index.js

  • 位置:src/store

import {createStore} from 'vuex'

export default createStore({
    state: {
        tagsList: [],
        collapse: false
    },
    getters: {
        countTags(state){
            return state.tagsList.length;
        }

    },
    mutations: {
        // 侧边栏折叠
        handleCollapse(state) {
            state.collapse = !state.collapse;
        },
        setTagsItem(state, data) {
            state
                .tagsList
                .push(data)
        }
    },
    actions: {
        handleCollapse(context){
            context.commit('handleCollapse');
        }

    },
    modules: {
            state:{
                //xxx
            },
            mutations:{
                //xxx
            },
            actions: {
                //xxx
            },
            getters:{
                //xxx
            },
            modules:{
                //xxx
            }
    }
})

5. 挂载

  • 文件名: main.js
import {createApp} from 'vue'
import App from './App.vue'
import store from './store'
const app = createApp(App)
app
    .use(store)
    .mount('#app')

6. 使用模板

组合式api风格

  • 注意:为保持共享状态的响应性,必须用在vue的computed中获取;用vue的ref或reactive均不可
import { computed } from 'vue'
    import { useStore } from 'vuex'

export default {
  setup () {
    const store = useStore();
    // 在 computed 函数中访问 state   
	const collapse = computed(() => store.state.collapse);
	// collapse.value 该共享状态的值
	
	
    // 在 computed 函数中访问 getter
    const double = computed(() => store.getters.double)
	
    // 侧边栏折叠
    const collapseChage = () => {
       store.commit("handleCollapse", !collapse.value);
        };	
        
	// 使用 mutation
	const increment = () => store.commit('increment');
	
	// 使用 action
    const asyncIncrement: () => store.dispatch('asyncIncrement')

    return {
      collapse,
      double,
      collapseChage,
      increment,
      asyncIncrement
    }
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值