不常用的和非必要的在此不进行讲述,需要更完善自己的请查看官网。
【建议使用Pinia代替vuex > 移步我pinia文章】
npm install vuex@next --save
- /src/store/index.ts
-
- // 在src文件夹下新建store文件夹,所有相关的状态管理封装都在store文件夹下
-
-
- import { createStore } from 'vuex'
- import m1 from './m1'
-
- // 创建一个新的 store 实例
- export const store = createStore({
- modules:{
- m1
- },
- state () {
- return {
- vuexText: 'vuex--Text'
- }
- },
- getters:{
- getters_vuexText(state){
- return state.vuexText + '++++额外的getters_vuexText'
- },
- getters_fn(state){
- return ()=>{
- return state.vuexText + '*-*-*-*-* 这是vuex函数式返回'
- }
- }
- },
- mutations: {
- increment (state) {
- // this.$store.commit('increment')
- // 变更状态
- console.log(state);
- state.vuexText = '更改数据后的vuexText'
- }
- },
- actions: {
- increment2 ({commit}) {
- commit('increment')
- }
- }
- })
- /src/store/m1.ts
-
- export default {
- namespaced: true, // moidules 模块开启 `命名空间` < 注意这个词,后面会出现!!
- state(){
- return {
- m1Text: ' m1Text'
- }
- },
- getters:{
- getters_m1Text(state){
- return state.m1Text + 'modules 的 getters'
- },
- },
- mutations: {
- moduleMu1 (state,data) { // 就接收2个参数
- // console.log(data,'commit()第二个参数将作为实参传递到这');
- state.m1Text = '更改数据后的 m1Text'
- }
- },
- actions: {
- moduleAc1 ({commit},data) { // 就接收2个参数
- // console.log(data,'dispatch()第二个参数将作为实参传递到这');
- commit('moduleMu1')
- }
- }
- }
- /src/main.ts
-
- import {store} from './store/index' // 引入vuex4 封装好的 store 模块
-
- import { createApp } from 'vue'
- import App from './App.vue'
- const app = createApp(App)
- app.use(store) // use() 挂挂载 store 模块
-
- // .....
- <template>
- <div>createStore 里的 modules 里模块下的使用div>
- <div>模块内 state 的引用: {{ store.state.m1.m1Text }}div>
-
- <div>开启模块 `命名空间` getters 的引用: {{ store.getters['m1/getters_m1Text'] }}div>
-
-
- <div>非 createStore 里的 modules 里模块下的使用div>
- <div>vuex数据的方式之一 》》》 {{store.state.vuexText}}div>
- <div>vuex数据的方式之一 》》》 {{store.getters.getters_fn()}}div>
- <div>vuex数据的方式之一 》》》 {{store.getters.getters_vuexText}}div>
- template>
- <script lang="ts" setup>
- import { useStore } from 'vuex'
- const store = useStore()
- console.log(store,"vuex - useStore()的返回值");
-
-
- // 调用 actions 就store.dispatch("action2") // 接收2个参数,第一个是方法名,第二个是传递的数据
- // 调用 mutations 就store.commit("mutations2") // 接收2个参数,第一个是方法名,第二个是传递的数据
- setTimeout(() => {
- // store.commit('increment')
- // store.dispatch('moduleAc1') // 默认情况下,模块内部的 action 和 mutation 仍然是注册在全局命名空间
-
- store.dispatch('m1/moduleAc1',{ amount: 10 }) // 开启模块 `命名空间` 后调用规则: '[模块名]/[actions里的方法名]'
- // store.commit('m1/moduleMu1')
- }, 3000);
-
- script>
系统 提示要我多水下行数。。
系统 提示要我多水下行数。。
系统 提示要我多水下行数。。
系统 提示要我多水下行数。。
系统 提示要我多水下行数。。
系统 提示要我多水下行数。。
系统 提示要我多水下行数。。
系统 提示要我多水下行数。。
系统 提示要我多水下行数。。
系统 提示要我多水下行数。。
系统 提示要我多水下行数。。
系统 提示要我多水下行数。。
系统 提示要我多水下行数。。
系统 提示要我多水下行数。。
系统 提示要我多水下行数。。