Vuex, как основной компонент управления состоянием в Vue, часто сталкивается с громоздкими проблемами написания. Можем ли мы использовать набор решений для определения только структуры данных без написания бесчисленныхmutation
getter
так же какaction
.
Итак, в принципе, мы делаем vuex легче и проще.
Super-Vuex
Super-Vuexможет помочь вам сделать это. Давайте сначала посмотрим на простой метод письма, может ли он удовлетворить ваши ежедневные потребности в развитии.
данные:
// namespace: user
const store = {
name: 'evio',
age: 18,
contact: {
email: 'xxx@qq.com',
tel: 13000000000,
students: [
{ name: 'aaa', age: 20 }
]
}
};
передача:
this.$store.user.commit('age', 30);
this.$store.user.commit('contact.email', 'aaa@qq.com');
this.$store.user.commit('contact.tel', 13800000000);
this.$store.user.push('contact.students', { name: 'bbb', age: 21 }, { name: 'ccc', age: 22 });
this.$store.user.unshift('contact.students', { name: 'ddd', age: 23 });
this.$store.user.splice('contact.students', 1, 2);
Если по нашему замыслу весь Vuex станет объектом данных, и мы сможем напрямую манипулировать им через некоторые методы. Это упрощает его разработку и в то же время позволяет сэкономить много кода и уменьшить размер всего проекта.
Super-Vuex
сделали это для вас. Конечно, нам также нужно настроить некоторые методы, они поддерживаются.
Простая демонстрация
Создайте экземпляр ChildVuex для хранения пользовательских данных.
// ./store/user.js
import { ChildVuex } from "super-vuex";
// 'user'为命名空间
const child = new ChildVuex('user');
export default child;
child.value = {
name: 'evio',
age: 18,
students: [
{
name: 'yixianle',
age: 10
}
],
load: {
allow: true,
total: 100
}
};
Вы можете создать более одного, вот еще один экземпляр ChildVuex для хранения дополнительных данных.
// ./store/sub.js
import { ChildVuex } from "super-vuex";
// 'sub'为命名空间
const sub = new ChildVuex('sub');
export default sub;
sub.value = {
name: 'evio',
subs: [1,2,3,4],
isVip: false,
};
Создайте экземпляр SuperVuex
// store.js
import { SuperVuex } from 'super-vuex';
// 两个vuex插件,vuexPromise和vuejsStorage
import vuexPromise from 'vuex-promise';
import vuejsStorage from 'vuejs-storage';
import UserStore from './store/user';
import Subs from './store/sub'
const Main = new SuperVuex();
Main.setModule(UserStore);
// 可以set多个module
Main.setModule(Subs);
// 在SuperVuex中使用插件
Main.setPlugin(vuexPromise, vuejsStorage);
export default Main.init();
Как использовать во Вью
<template>
...
</template>
<script>
import store from './store';
export default {
store: store,
name: "index",
methods: {
changeName() {
this.$store.user.commit('name', 'someone');
},
changeAllow() {
this.$store.user.commit('load.allow', false);
},
pushStudent() {
this.$store.user.push('students', {
name: 'huaping',
age: 300
});
},
pushSubs() {
this.$store.sub.push('subs', 10);
},
unshiftStudent() {
this.$store.user.unshift('students', {
name: 'huaping1',
age: 302
});
},
deleteStudent() {
this.$store.user.splice('students', 0, 1);
},
gets() {
this.$store.user.dispatch('load.data');
}
}
}
</script>
наконец
Некоторые простые вещи часто могут повысить эффективность нашей разработки.После моей практики в компании, таких как некоторые сложные фоновые системы,super-vuex
очень подходит. Вопросы и PRS приветствуются.