摘要:基本概念現(xiàn)在回到我們的中創(chuàng)建且聲明一個對象張三李四王五這里不同于文檔中的寫法,我這里直接將創(chuàng)建聲明簡寫成一段代碼個人更偏好這樣寫。
什么是Vuex?
用2句話概括:
主要應(yīng)用于Vue.js中管理數(shù)據(jù)狀態(tài)的一個庫
通過創(chuàng)建一個集中的數(shù)據(jù)存儲,供程序中所有組件訪問
當(dāng)然這么說肯定還是有所不懂,這里我就用單一使用vue.js和使用vuex.js場景的不同進(jìn)行對比講解
單一使用Vue.js的場景
在單一使用vue.js的場景中,我們難免要在不同的組件中互相傳值。在該場景中,由一個根組件,兩個父組件再各自擁有一個子組件,我們?nèi)绻褂胮rop的屬性傳值,在這個詳情組件需要使用添加組件中的某個值時,我們需要不停的觸發(fā)某個事件將這個值一層一層一層一層地沿著這個路徑傳過去,這樣能實現(xiàn)將值傳遞給詳情組件,但這是相當(dāng)?shù)穆闊ü碇牢耶?dāng)初不知道vuex為了傳值頭有多大)。現(xiàn)在讓我們看下vuex.js場景下的效果
使用Vuex.js的場景
我們將使用專門的store存儲所有的數(shù)據(jù),如果我們需要取到組件二或更深一級的子組件的某個數(shù)據(jù)我們可以直接使用getter方法直接拿到其中的數(shù)據(jù)。如果我們需要向store中添加或更改某個數(shù)據(jù),我們可以用mutation或直接$store.state的形式直接跨過父組件向store中直接添加或更改數(shù)據(jù)。就好比一個倉庫,所有人能直接跨過上級拿到倉庫中的某個你所需要的東西,這無疑是在我們使用vue開發(fā)項目時,相當(dāng)省時省力的辦法。
涉及到非父子關(guān)系的組件,例如兄弟關(guān)系、祖孫關(guān)系,甚至更遠(yuǎn)的關(guān)系組件之間的聯(lián)系
中大型單頁應(yīng)用,考慮如何更好地在組件外部管理狀態(tài)
相信大家在看完上面vuex的基本介紹后,心里對它使用場景也有了一個大概的想法。
總而言之,在頁面數(shù)據(jù)結(jié)構(gòu)比較復(fù)雜,數(shù)據(jù)和組件分離,分別處理,組件量較大的情況下,那么使用 Vuex 是非常合適的。
在使用vue-cli腳手架創(chuàng)建項目后
npm install vuex
進(jìn)入項目安裝vuex,安裝完成后,在項目的文件夾src中再新建一個文件夾store,文件夾中新建文件store.js(命名為本人習(xí)慣)。
store.js
//引入vue和Vuex import Vue from "vue" import Vuex from "vuex" //引入之后,對vuex進(jìn)行引用 Vue.use(Vuex)
main.js
import {store} from "./store/store"
new Vue({ store:store,//使用store el: "#app", router, components: { App }, template: "", })
在main.js 中引入vuex文件
到此為止,vuex的引入就算是成功了。
基本概念 State現(xiàn)在回到我們的store.js中
//創(chuàng)建且聲明一個對象 export const store = new Vuex.Store({ state:{ isShow:true, items:[ { name:"張三", num:"1" }, { name:"李四", num:"2" }, { name:"王五", num:"3" } ] } })
這里不同于文檔中的寫法,我這里直接將創(chuàng)建聲明簡寫成一段代碼(個人更偏好這樣寫)。在state中填寫外部組件需要的數(shù)據(jù)。外部組件中調(diào)取數(shù)據(jù):
computed:{ itemList(){ return this.$store.state.items } },
//這里有兩種辦法 //p在computed的itemList方法中循環(huán){{item.num}}{{item.name}}
//p直接指向store中的state的items數(shù)組{{item.num}}{{item.name}}
可以通過computed中的方法獲取數(shù)據(jù),也可以直接使用this.$store.state。
getters乍一看也是獲取數(shù)據(jù),但是在獲取之前它多了一個步驟:計算過濾獲取的數(shù)據(jù)并返回過濾完成后的數(shù)據(jù)。如果多個組件需要用到篩選后的數(shù)據(jù),那我們就必須到處重復(fù)寫該計算屬性函數(shù);或者將其提取到一個公共的工具函數(shù)中,并將公共函數(shù)多處導(dǎo)入。
store.js
getters:{ numChange(state){ return state.items.forEach(item=>{ item.num+=100 }) } }
組件中:
//寫法一:{{item.num}}{{item.name}}
//寫法二: computed:{ numChange(){ return this.$store.getters.numChange } },
p標(biāo)簽在computed中返回getters數(shù)據(jù)的中循環(huán),數(shù)據(jù)顯示出來便直接是計算完成后的數(shù)據(jù)
我們可以使用mutations配合vuex提供的commit方法來修改state中的狀態(tài)
store.js
export const store = new Vuex.Store({ state:{ isShow:false, myData:"", items:[ { name:"張三", num:1 }, { name:"李四", num:2 }, { name:"王五", num:3 } ] }, mutations:{ //定義一個函數(shù)動態(tài)修改state的狀態(tài)值 numTurn(state){ /這里的state代表上面的State state.items.forEach(item=>{ item.num+=100 }) } } })
組件中:
//寫法一:
//寫法二: methods:{ numTurn(){ this.$store.commit("numTurn") } }
兩種寫法原理是一樣的,都能實現(xiàn)效果。注意:mutations中的方法需要commit配合回調(diào)實現(xiàn),而不再是$store.mutation,且mutations只能處理同步函數(shù),那如果需要處理異步操作怎么辦?
Action如文檔中所說,Action類似于Mutations,不同在于:
Aciton提交的是mutation,而不是直接變更狀態(tài)
Action可以包含任何異步操作
那也就是說,如果我們是需要任意的異步操作,那就需要在Action中實現(xiàn)
部分內(nèi)容略過,本文主要關(guān)于vuex基礎(chǔ)理解和使用
推薦視頻:https://ke.qq.com/course/258141
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/97021.html
摘要:一基礎(chǔ)學(xué)習(xí)模式下圖不僅概括了模式,還描述了在中是如何和以及進(jìn)行交互的。關(guān)于這一點我們將在后續(xù)反應(yīng)系統(tǒng)中討論。父組件通過向下傳遞數(shù)據(jù)給子組件,子組件通過給父組件發(fā)送消息。這個對象必須是普通對象原生對象,及原型屬性會被忽略。 Vue.js 是用于構(gòu)建交互式的 Web 界面的庫。Vue.js 提供了 MVVM 數(shù)據(jù)綁定和一個可組合的組件系統(tǒng),具有簡單、靈活的 API。 其實和Jquery一樣...
摘要:官網(wǎng)地址聊天機(jī)器人插件開發(fā)實例教程一創(chuàng)建插件在系統(tǒng)技巧使你的更加專業(yè)前端掘金一個幫你提升技巧的收藏集。我會簡單基于的簡潔視頻播放器組件前端掘金使用和實現(xiàn)購物車場景前端掘金本文是上篇文章的序章,一直想有機(jī)會再次實踐下。 2道面試題:輸入URL按回車&HTTP2 - 掘金通過幾輪面試,我發(fā)現(xiàn)真正那種問答的技術(shù)面,寫一堆項目真不如去刷技術(shù)文章作用大,因此刷了一段時間的博客和掘金,整理下曾經(jīng)被...
摘要:寫在前面本文旨在通過一個簡單的例子,練習(xí)的幾個常用方法,使初學(xué)者以最快的速度跑起來一個的示例。生成基于的項目基于腳手架生成一個項目常用命令項目名進(jìn)入項目目錄,使用先試著跑一下。子組件可以修改父組件和自己的數(shù)據(jù)。 寫在前面 本文旨在通過一個簡單的例子,練習(xí)vuex的幾個常用方法,使初學(xué)者以最快的速度跑起來一個vue + vuex的示例。 學(xué)習(xí)vuex需要你知道vue的一些基礎(chǔ)知識和用法。...
摘要:它采用集中式存儲管理應(yīng)用的所有組件的狀態(tài),并以相應(yīng)的規(guī)則保證狀態(tài)以一種可預(yù)測的方式發(fā)生變化。這需要對短期和長期效益進(jìn)行權(quán)衡。改變中的狀態(tài)的唯一途徑就是顯式地提交。在里使用進(jìn)行延遲執(zhí)行。上下文對象,這里你可以理解稱本身。 這篇文章主要介紹了Vuex入門到上手教程,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧 一、前言 當(dāng)我們的應(yīng)用遇到多個組件共享狀態(tài)時,會需...
閱讀 3654·2021-08-02 13:41
閱讀 2603·2019-08-30 15:56
閱讀 1568·2019-08-30 11:17
閱讀 1246·2019-08-29 15:18
閱讀 654·2019-08-29 11:10
閱讀 2731·2019-08-26 13:52
閱讀 584·2019-08-26 13:22
閱讀 3028·2019-08-23 15:41