Vuex使用方法

store/index.ts

import { createStore } from 'vuex'
import ModuleUser from './user'

export interface ItemType {
  id: string,
  content: String,
  isFinished: boolean
};

export type ToDoType = Array<ItemType>;

interface stateType {
  type: 'all' | 'active' | 'complete'
  todo: ToDoType
}

export default createStore({
  state: {
    type: 'all',
    todo: []
  } as stateType,
  // computed
  getters: {
  },
  // 同步methods
  mutations: {
    AddTodo(state: stateType, payload: { id: string, content: string }) {
      state.todo.push({ ...payload, isFinished: false });
    },
    init(state: stateType, payload: stateType) {
      state.todo = [...payload.todo];
    },
    updateTodo(state: stateType, payload: ItemType & { index: number }) {
      state.todo[payload.index].content = payload.content;
      state.todo[payload.index].isFinished = payload.isFinished;
    },
    deleteTodo(state: stateType, payload: { id: string, index: number }) {
      state.todo.splice(payload.index, 1);
    },
    changeType(state: stateType, payload: 'all' | 'active' | 'complete') {
      state.type = payload;
      console.log(state.type);
    }
  },
  // 异步methods
  actions: {
  },
  // 多模块createStore
  modules: {
     user: ModuleUser,
  }
})

store/user.ts

// user. js
const ModuleUser = {
  state: {
    id: "",
    username: "",
    photo: "",
  },
  // 同computed
  getters: {
  },
  // method
  mutations: {
    updateUser(state, user) {
      state.id = user.id;
      state.username = user.username;
    },
  },
  // method异步
  actions: {
  },
  // 多模块
  modules: {
  }
};

export default ModuleUser;

main.ts

import store from './store'

createApp(App).use(store)

 在vue文件中调用

<script setup>
// 方法一
import { useStore } from 'vuex';

const store = useStore();
store.dispatch; // 调用actions中方法
store.commit; // 调用mutations中方法
console.log(store.state, store.dispatch, store.commit);

// 方法二
import store from "@/store";

store.dispatch; // 调用actions中方法
store.commit; // 调用mutations中方法
console.log(store.state, store.dispatch, store.commit);

</script>

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值