跳至正文
Wener Notes

vuex

约 1 分钟阅读
标签:状态管理遗留系统

[!CAUTION]

  • ⚠️ 4年未更新
  • 替代方案: , Vue 3 Composition API reactive
    • MIT, TS
  • Vuex 使用 单一状态树
  • 每个应用将仅仅包含一个 store 实例
  • 核心概念
    • State
    • Getters
    • Mutations
      • 必须同步
    • Actions
      • 可以异步
      • Action 提交的是 mutation,而不是直接变更状态。
    • Modules
      • 第一个参数是模块的局部状态对象
      • context.state - 局部状态
      • context.rootState - 根状态
TypeScript
import { mapGetters, mapState, mapMutations, mapActions, createStore } from 'vuex';

const store = createStore({
  state: {
    count: 0,
    todos: [
      { id: 1, text: '...', done: true },
      { id: 2, text: '...', done: false },
    ],
  },
  getters: {
    doneTodos(state) {
      return state.todos.filter((todo) => todo.done);
    },
    // module 第三个参数是根状态
    sumWithRootCount(state, getters, rootState) {
      return state.count + rootState.count;
    },
  },
  mutations: {
    increment(state) {
      state.count++;
    },
  },
  actions: {
    increment(context) {
      context.commit('increment');
    },
  },
  modules: {},
});

store.getters.doneTodos;

// 手动提交
store.commit('increment', 10);
store.commit({
  type: 'increment',
  amount: 10,
});

// 分发 Action
store.dispatch('increment');
store.ts
import { createNamespacedHelpers } from 'vuex';

// 模块
const { mapState, mapActions } = createNamespacedHelpers('some/nested/module');

关联信息

反向链接、本文链接的其他页面和外部资料。

站内链接

  • vuex
    笔记 · Pinia

    vuejs/pinia · MIT, TS · 新的官方推荐的 Vue 状态管理库

参考资料

GitHub1 条
最近更新commit 906e816编辑