Sobes.tech
Middle
188

Vue.js қолданбасында Vuex-пен өзара әрекеттесуді қалай ұйымдастыруға болады?

AI-дан жауап

sobes.tech AI

Vue.js қолданбасында Vuex-пен өзара әрекеттесу ұйымдастыру үшін негізгі келесі тәсілдер пайдаланылады:

  1. Күйді алу (Getters): Бұл хранилищеден алынған күйдің шығу (есептелетін) қасиеттерін алу үшін пайдаланылады.

    // компонентте
    import { mapGetters } from 'vuex';
    
    export default {
      computed: {
        // хранилищтің геттерін жергілікті есептелетін қасиетке сәйкестендіру
        ...mapGetters([
          'doneTodosCount',
          'getTodoById'
        ])
        // немесе басқа атаумен сәйкестендіру
        // ...mapGetters({
        //   // this.localName-ді this.$store.getters.getterName-ға сәйкестендіру
        //   localTodosCount: 'doneTodosCount'
        // })
      },
        methods: {
           // аргументтері бар геттерді пайдалану
           getSpecificTodo(id) {
              return this.getTodoById(id); // Геттерге қасиет немесе әдіс ретінде қол жеткізу
           }
        }
    }
    
  2. Күйді алу (State): Тікелей хранилищінің күйіне қол жеткізу.

    // компонентте
    import { mapState } from 'vuex';
    
    export default {
      computed: {
        // хранилищінің күй қасиетін жергілікті есептелетін қасиетке сәйкестендіру
        ...mapState([
          'count'
        ])
        // немесе басқа атаумен сәйкестендіру
        // ...mapState({
        //   // this.localCount-ті this.$store.state.count-қа сәйкестендіру
        //   localCount: 'count'
        // })
      }
    }
    
  3. Күйді өзгерту (Mutations): Бұл күйді өзгерту үшін жалғыз әдіс. Олар синхронды болуы керек.

    // компонентте
    import { mapMutations } from 'vuex';
    
    export default {
      methods: {
        // хранилищтің мутациясын жергілікті әдіске сәйкестендіру
        ...mapMutations([
          'increment' // this.increment()-ті this.$store.commit('increment')-ға сәйкестендіру
        ])
        // немесе басқа атаумен сәйкестендіру
        // ...mapMutations({
        //   add: 'increment' // this.add()-ты this.$store.commit('increment')-ға сәйкестендіру
        // })
      },
        // мутацияны шақыру
        someMethod() {
           this.increment(); // Немесе this.add();
        }
    }
    
  4. Асинхронды операциялар (Actions): Бұл асинхронды операциялар мен мутацияларды шақыру үшін пайдаланылады.

    // компонентте
    import { mapActions } from 'vuex';
    
    export default {
      methods: {
        // хранилищтің әрекетін жергілікті әдіске сәйкестендіру
        ...mapActions([
          'incrementAsync' // this.incrementAsync()-ты this.$store.dispatch('incrementAsync')-ға сәйкестендіру
        ])
        // немесе басқа атаумен сәйкестендіру
        // ...mapActions({
        //   addAsync: 'incrementAsync' // this.addAsync()-ты this.$store.dispatch('incrementAsync')-ға сәйкестендіру
        // })
      },
        // әрекетті шақыру
        someMethod() {
            this.incrementAsync(); // Немесе this.addAsync();
        }
    }
    
  5. Модульдер (Modules): Үлкен қолданбаның ұйымдастырылуын жақсарту үшін хранилищті модульдерге бөлу.

    // Модульдердің құрылымының мысалы
    // store/index.js
    import Vue from 'vue';
    import Vuex from 'vuex';
    import moduleA from './modules/moduleA';
    import moduleB from './modules/moduleB';
    
    Vue.use(Vuex);
    
    export default new Vuex.Store({
      modules: {
        a: moduleA,
        b: moduleB
      }
    });
    
    // store/modules/moduleA.js
    const moduleA = {
      namespaced: true, // атау кеңістігін қосу
      state: {
        count: 0
      },
      mutations: {
        increment (state) {
          state.count++;
        }
      },
      actions: {
        incrementIfOdd ({ state, commit }) {
          if ((state.count + 1) % 2 === 0) {
            commit('increment');
          }
        }
      },
      getters: {
        doubleCount (state) {
          return state.count * 2;
        }
      }
    };
    
    export default moduleA;
    

    Компонентте модуль элементтеріне кеңістік атауы арқылы қол жеткізу:

    // компонентте
    import { mapState, mapGetters, mapMutations, mapActions } from 'vuex';
    
    export default {
      computed: {
        ...mapState('a', [ // 'a' модулінің күйіне қол жеткізу
          'count'
        ]),
        ...mapGetters('a', [ // 'a' модулінің геттерлеріне қол жеткізу
          'doubleCount'
        ])
      },
      methods: {
        ...mapMutations('a', [ // 'a' модулінің мутацияларына қол жеткізу
          'increment'
        ]),
        ...mapActions('a', [ // 'a' модулінің әрекеттеріне қол жеткізу
          'incrementIfOdd'
        ])
      }
    }