Heim > Web-Frontend > js-Tutorial > Installation und Verwendung des Vue.js-Statusverwaltungsmodus Vuex (Codebeispiel)

Installation und Verwendung des Vue.js-Statusverwaltungsmodus Vuex (Codebeispiel)

不言
Freigeben: 2018-09-01 16:44:02
Original
1876 Leute haben es durchsucht

Der Inhalt dieses Artikels befasst sich mit der Installation und Verwendung des Vue.js-Statusverwaltungsmodus (Codebeispiele). Ich hoffe, dass er für Sie hilfreich ist. .

Installation und Verwendung des Vue.js-Statusverwaltungsmodus Vuex (Codebeispiel)

uex ist ein Zustandsverwaltungsmuster, das speziell für Vue.js-Anwendungen entwickelt wurde. Es verwendet einen zentralen Speicher, um den Status aller Komponenten der Anwendung zu verwalten, und stellt mithilfe entsprechender Regeln sicher, dass sich der Status auf vorhersehbare Weise ändert.

Installieren und verwenden Sie vuex

Zuerst installieren wir vuex in der Entwicklungsumgebung vue.js 2.0:

npm install vuex --save
Nach dem Login kopieren

Dann fügen Sie Folgendes hinzu:

import vuex from 'vuex'
Vue.use(vuex);
const store = new vuex.Store({//store对象
    state:{
        show:false,
        count:0
    }
})
Nach dem Login kopieren

zu main.js Dann Fügen Sie das Store-Objekt hinzu, wenn Sie das Vue-Objekt instanziieren:

new Vue({
  el: '#app',
  router,
  store,//使用store
  template: '<app></app>',
  components: { App }
})
Nach dem Login kopieren

Jetzt können Sie das Statusobjekt über store.state abrufen und Statusänderungen über die Methode store.commit auslösen:

store.commit('increment')

console.log(store.state.count) // -> 1
Nach dem Login kopieren

State

Vuex-Status in Vue-Komponente abrufen

Der einfachste Weg, den Status aus der Store-Instanz zu lesen, besteht darin, einen bestimmten Status in der berechneten Eigenschaft zurückzugeben:

// 创建一个 Counter 组件
const Counter = {
  template: `<p>{{ count }}</p>`,
  computed: {
    count () {
      return this.$store.state.count
    }
  }
}
Nach dem Login kopieren

mapState-Hilfsfunktion

Wenn eine Komponente mehrere Zustände erhalten muss, wäre es etwas eintönig und überflüssig, diese Zustände als berechnete Eigenschaften zu deklarieren. Um dieses Problem zu lösen, können wir die Hilfsfunktion „mapState“ verwenden, um berechnete Attribute zu generieren:

// 在单独构建的版本中辅助函数为 Vuex.mapState
import { mapState } from 'vuex'

export default {
  // ...
  computed: mapState({
    // 箭头函数可使代码更简练
    count: state => state.count,

    // 传字符串参数 'count' 等同于 `state => state.count`
    countAlias: 'count',

    // 为了能够使用 `this` 获取局部状态,必须使用常规函数
    countPlusLocalState (state) {
      return state.count + this.localCount
    }
  })
}
Nach dem Login kopieren

Wenn der Name des zugeordneten berechneten Attributs mit dem Namen des untergeordneten Knotens des Staates übereinstimmt, Wir können auch ein String-Array an mapState übergeben:

computed: mapState([
  // 映射 this.count 为 store.state.count
  'count'
])
Nach dem Login kopieren

Getter

Getter ähneln den in Vue berechneten Zuständen und generieren dann neue Daten (genau wie berechnet). Eigenschaften, der Rückgabewert des Getters wird basierend auf seinen Abhängigkeiten zwischengespeichert und nur dann neu berechnet, wenn sich seine Abhängigkeitswerte ändern.

Getter akzeptiert den Status als erstes Argument:

const store = new Vuex.Store({
  state: {
    todos: [
      { id: 1, text: '...', done: true },
      { id: 2, text: '...', done: false }
    ]
  },
  getters: {
    doneTodos: state => {
      return state.todos.filter(todo => todo.done)
    }
  }
})
Nach dem Login kopieren

Zugriff über Eigenschaften

Getter wird als store.getters-Objekt bereitgestellt, und Sie können auf diese Werte als Eigenschaften zugreifen :

store.getters.doneTodos // -> [{ id: 1, text: '...', done: true }]
Nach dem Login kopieren

Getter kann auch andere Getter als zweiten Parameter akzeptieren:

getters: {
  // ...
  doneTodosCount: (state, getters) => {
    return getters.doneTodos.length
  }
}

store.getters.doneTodosCount // -> 1
Nach dem Login kopieren

In Komponenten verwendet:

computed: {
  doneTodosCount () {
    return this.$store.getters.doneTodosCount
  }
}
Nach dem Login kopieren

Beachten Sie, dass Getter als Vue verwendet werden, wenn über Eigenschaften darauf zugegriffen wird Teil von Ein reaktives System speichert zwischen.

Zugriff über Methode

Zugriff über Methode

Sie können dem Getter auch Parameter übergeben, indem Sie den Getter eine Funktion zurückgeben lassen. Sehr nützlich, wenn Sie das Array im Speicher abfragen:

getters: {
  // ...
  getTodoById: (state) => (id) => {
    return state.todos.find(todo => todo.id === id)
  }
}
Nach dem Login kopieren
store.getters.getTodoById(2) // -> { id: 2, text: '...', done: false }
Nach dem Login kopieren

Beachten Sie, dass beim Zugriff auf den Getter über eine Methode dieser jedes Mal aufgerufen wird, ohne die Ergebnisse zwischenzuspeichern.

mapGetters-Hilfsfunktion

Die MapGetters-Hilfsfunktion ordnet die Getter im Speicher lediglich lokal berechneten Eigenschaften zu:

import { mapGetters } from 'vuex'

export default {
  // ...
  computed: {
  // 使用对象展开运算符将 getter 混入 computed 对象中
    ...mapGetters([
      'doneTodosCount',
      'anotherGetter',
      // ...
    ])
  }
}
Nach dem Login kopieren

Wenn Sie einem Getter-Attribut einen anderen Namen geben möchten, verwenden Sie Objektform:

mapGetters({
  // 把 `this.doneCount` 映射为 `this.$store.getters.doneTodosCount`
  doneCount: 'doneTodosCount'
})
Nach dem Login kopieren

Mutation

Die einzige Möglichkeit, den Status im Vuex-Store zu ändern, besteht darin, eine Mutation einzureichen.

Registrierung:

const store = new Vuex.Store({
  state: {
    count: 1
  },
  mutations: {
    increment (state) {
      // 变更状态
      state.count++
    }
  }
})
Nach dem Login kopieren

Aufruf:

store.commit('increment')
Nach dem Login kopieren

Nutzlast senden

Sie können zusätzliche Parameter an store.commit übergeben, also Mutation Nutzlast:

// ...
mutations: {
  increment (state, n) {
    state.count += n
  }
}
Nach dem Login kopieren
store.commit('increment', 10)
Nach dem Login kopieren

Wenn mehrere Parameter übermittelt werden, müssen sie in Form von Objekten übermittelt werden

// ...
mutations: {
  increment (state, payload) {
    state.count += payload.amount
  }
}
Nach dem Login kopieren
store.commit('increment', {
  amount: 10
})
Nach dem Login kopieren

Hinweis: Die Operationen in Mutationen müssen synchron sein

Aktion

Aktion ähnelt Mutation, außer dass:

  • Aktion übermittelt eine Mutation, anstatt den Zustand direkt zu ändern.

  • Aktion kann jede asynchrone Operation enthalten.

const store = new Vuex.Store({
  state: {
    count: 0
  },
  mutations: {
    increment (state) {
      state.count++
    }
  },
  actions: {
    increment (context) {
      context.commit('increment')
    }
  }
})
Nach dem Login kopieren

Aktion wird durch die Methode store.dispatch ausgelöst:

store.dispatch('increment')
Nach dem Login kopieren

Führt einen asynchronen Vorgang innerhalb der Aktion durch:

actions: {
  incrementAsync ({ commit }) {
    setTimeout(() => {
      commit('increment')
    }, 1000)
  }
}
Nach dem Login kopieren

Übergeben Sie Parameter in Objektform :

// 以载荷形式分发
store.dispatch('incrementAsync', {
  amount: 10
})
Nach dem Login kopieren

Verwandte Empfehlungen:

Vue.js's Vuex (Zustandsverwaltung)

So verwenden Sie die Vuex-Zustandsverwaltung

Über die Familien-Bucket-Statusverwaltung von Vuex

Das obige ist der detaillierte Inhalt vonInstallation und Verwendung des Vue.js-Statusverwaltungsmodus Vuex (Codebeispiel). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage