您好,登錄后才能下訂單哦!
這篇文章主要講解了“Vue的Vuex怎么使用”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Vue的Vuex怎么使用”吧!
1.響應式
屬于 vue 生態一環,,能夠觸發響應式的渲染頁面更新。 (localStorage 就不會)
2.可預測的方式改變數據
避免數據污染
3.無需轉換數據
JS 原生的數據對象寫法(不需要做轉換)。(localStorage 需要做轉換)
1.復雜
適合大應用,不適合小型應用
2.不能持久化(刷新頁面后vuex中的state會變為初始狀態)
解決方案
結合localStorage
vuex-persistedstate插件
當我們多個頁面需要共享數據時就可以使用Vuex。
實際開發中我們一般在下面這種情況使用它:
當前登錄用戶的信息
購物車的信息
收藏的信息
用戶的地理位置
本處用計數器來測試:一個組件修改計數器的值,其余兩個不相關組件可以監測到時計數器值的改變。
做法:一個組件(ComponentA)將數據共享給另外兩個不相關組件(ComponentB和ComponentC),外部用Parent.vue放置這三個組件。
在工程目錄下執行:npm install vuex
創建目錄store,在其下邊創建CounterStore.js,內容如下:
import Vue from 'vue'; import Vuex from 'vuex'; Vue.use(Vuex); const couterStore = new Vuex.Store( { state: { count1: 0, count2: 0, }, mutations: { increment1(state) { state.count1++; }, decrement1(state) { state.count1--; }, increment2: state => state.count2++, decrement2: state => state.count2--, } } ); export default couterStore;
// The Vue build version to load with the `import` command // (runtime-only or standalone) has been set in webpack.base.conf with an alias. import Vue from 'vue' import App from './App' import router from './router' import CouterStore from './store/CounterStore' Vue.config.productionTip = false /* eslint-disable no-new */ new Vue({ el: '#app', router, store: CouterStore, components: { App }, template: '<App/>' })
按照JS語法,key與value重名時可以簡寫:(很多教程這么寫)
// The Vue build version to load with the `import` command // (runtime-only or standalone) has been set in webpack.base.conf with an alias. import Vue from 'vue' import App from './App' import router from './router' import store from './store/CounterStore' Vue.config.productionTip = false /* eslint-disable no-new */ new Vue({ el: '#app', router, store, components: { App }, template: '<App/>' })
代碼
ComponentA.vue
<template> <div class="container"> <h4>ComponentA</h4> <button @click="increment1">增加:第1個計數器</button> <button @click="decrement1">減少:第1個計數器</button><br><br> <button @click="increment2">增加:第2個計數器</button> <button @click="decrement2">減少:第2個計數器</button> </div> </template> <script> export default { data() { return { count1: 0, count2: 0, } }, methods:{ increment1() { this.$store.commit('increment1') }, decrement1() { this.$store.commit('decrement1') }, increment2() { this.$store.commit('increment2') }, decrement2() { this.$store.commit('decrement2') } } } </script> <style scoped> .container { margin: 20px; border: 2px solid blue; padding: 20px; } </style>
ComponentB.vue
<template> <div class="container"> <h4>ComponentB</h4> 計數器的值:{{msg}} <!--也可以這么寫:--> <!--計數器的值:{{this.$store.state.count1}}--> </div> </template> <script> export default { computed:{ msg() { return this.$store.state.count1; } } } </script> <style scoped> .container { margin: 20px; border: 2px solid blue; padding: 20px; } </style>
ComponentC.vue
<template> <div class="container"> <h4>ComponentC</h4> 計數器的值:{{msg}} <!--也可以這么寫:--> <!--計數器的值:{{this.$store.state.count2}}--> </div> </template> <script> export default { computed:{ msg() { return this.$store.state.count2; } } } </script> <style scoped> .container { margin: 20px; border: 2px solid blue; padding: 20px; } </style>
Parent.vue
<template> <div class="outer"> <h4>父組件</h4> <component-a></component-a> <component-b></component-b> <component-c></component-c> </div> </template> <script> import ComponentA from "./ComponentA"; import ComponentB from "./ComponentB"; import ComponentC from "./ComponentC"; export default { name: 'Parent', components: {ComponentA, ComponentB, ComponentC}, data() { return { name: 'Tony', age: 20, phoneNumber: '1234567890' } } } </script> <style scoped> .outer { margin: 20px; border: 2px solid red; padding: 20px; } </style>
路由
import Vue from 'vue' import Router from 'vue-router' import Parent from "../components/Parent"; Vue.use(Router) export default new Router({ routes: [ { path: '/parent', name: 'Parent', component: Parent, } ], })
訪問: http://localhost:8080/#/parent
感謝各位的閱讀,以上就是“Vue的Vuex怎么使用”的內容了,經過本文的學習后,相信大家對Vue的Vuex怎么使用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。