最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue組件間通信 Vuex的用法解析

 更新時間:2019年08月05日 08:24:19   作者:計算機-小白  
這篇文章主要介紹了Vue組件間通信-Vuex,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

上回說到Vue組件間通訊,最后留了一個彩蛋~~~Vuex。Vuex是另一種組件通訊的方法,這節(jié)來說說Vuex(store倉庫)。

首先Vuex需要安裝,安裝的方式有很多,在這里就不一一細說了。我是通過npm方式安裝的:

npm install vuex --save

安裝好之后需要再main.js里全局引入:

import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)new Vue({el:'#app',store,components: { App },template: '<App/>'})

這樣就完成了Vuex的安裝。接下來就是Vuex的用法了:

Vuex有五個屬性:State、Getter、Mutation、Action、Module。

1. State里放入的是倉庫的數(shù)據(jù),類似于js里的data:

import Vue from 'vue'
const modules = {
 state:{
 name: '小白'
 }
 namespaced: true
}
export default modules

把Vuex放入src下的store文件里,建一個新的組件modules,然后把他拋出來,被引入所需數(shù)據(jù)的組件:

<script>
import { mapState }from 'vuex'
export default {
 computed:{
 // name(){
 // return this.$store.state.name
 // }
 ...mapState(['name'])
 },
 mounted(){
 console.log(this.name)
 }
}
</script>

Vuex里的數(shù)據(jù)需要從計算屬性(computed)里獲取,我寫了兩種我常用的方法,都可以接收到數(shù)據(jù),在mounted鉤子里打印出的數(shù)據(jù):

這里只是舉個例子教大家如何用,不建議大家向我這樣去寫,Vuex應(yīng)該用于所有業(yè)務(wù)邏輯的數(shù)據(jù)。不涉及到業(yè)務(wù)邏輯的,建議大家用上一章的方法:Vue組件間通信。

2. Getters里放入State里數(shù)據(jù)的擴展數(shù)據(jù),可以把它當(dāng)作計算屬性。比如State里有一個數(shù)組,就可以從Getters里獲取到數(shù)組的長度,或是取到對象里面的屬性,用法和計算屬性類似:

import Vue from ‘vue'

const modules = {
 state:{
 list:[
  {id :1,content: '第一條'},
  {id :2,content: '第二條'}
 ]
 },
 getter:{
 listLength: (state)=>{return state.list.length}
 },   namespaced: true}export default modules;

我在state里存了一個數(shù)組,然后getters計算出state里數(shù)組的長度,接下來就是在組件里接收了:

<script>
import { mapGetters } from 'Vuex'
export default {
 compoted:{
 ...mapGetters(['listLength'])
 },
 mounted(){
 console.log(this.listLegth)
 }
}
</script>

打開控制臺打印出2,就是list數(shù)組的長度。

3. Mutations是保存在倉庫的方法,這個方法只能用來改變state里面的數(shù)據(jù),而且想要改變state里的數(shù)據(jù)只能用mutations里的方法,并且它里面的方法只能是同步的:

import Vue from 'vue'

const modules = {
 state:{
 name: '小黑'
 },
 mutations:{
 changeName(state){
  state.name = '小白'
 }
 },
 namespaced: true
}
export default modules;

還是那個例子,下面是組件調(diào)用方法:

<html>
<div>
 {{ name }}
 <el-button @click="changeName">改變名字</el-button>
</div>
</html>
<script>
import { mapState,mapMutations } from 'vuex'
export default {
 compoted:{
 ...mapState(['name'])
 },
 methods:{
 ...mapMutations(['changeName'])
 }
}
</script>

頁面渲染后為:

點擊按鈕之后為:

組件里的按鈕通過調(diào)用Vuex里的mutation方法將Vuex里的state數(shù)據(jù)改變,只不過mutations方法只能同步的,涉及到接口的就不能在它里面寫,怎么辦的?往下看:

4. Actions和mutations一樣都是Vuex里的方法,只不過他們有兩個最大的不同:

(1) Actions里可以存放異步方法,而Mutations只能放同步的;

(2) Actions里不可以更改state里的數(shù)據(jù),state里的數(shù)據(jù)只能在Mutations里更改。

Actions是什么方法?簡單的說,它就是一個Promise方法,通過不同的狀態(tài)執(zhí)行不同的方法,執(zhí)行方法可以是Actions里的方法,也可以是Mutations里的方法。

Actions我就不舉例子了,因為大部分都用于axios請求接口,簡單跟大家說說這個東西怎么使用:

import Vue from 'vue'
import request from '@/api/axios'

const modules = {
 state:{
 list:[]
 },
 actions:{
 getList({ commit }){
  // 調(diào)用接口方法
  request.getList()
  .then((response)=>{
  // commit用來分配mutations方法
  commit('getList',response)
  })
 }
 },
 mutations:{
 getList(state,response){
  state.list = response.data
 }
 }
}

簡單利用actions異步方法分配給mutations方法,然后在mutations方法里給state里的數(shù)據(jù)賦值,取到接口數(shù)據(jù)。

commit用于分配mutations方法,dispatch用于分配actions方法,都需要傳參進去。

組件調(diào)用其實和調(diào)用mutations方法類似:

<script>
import { mapState,mapActions } from 'vuex'
export default {
 computed:{
 ...mapState(['list'])
 },
 mounted(){
 this.getList()
 },
 methods:{
 ...mapActions(['getList'])
 }
}
</script>

這樣就基本完成了vuex傳值。

5. module可以把vuex分為不同的模塊,使業(yè)務(wù)邏輯變得更清晰,更準(zhǔn)確。在上面的代碼里,有const modules,給它不同的名字就是分為不同的模塊。不同的module可以存入不同的數(shù)據(jù)和方法,使用起來非常方便。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Vue中的this.$emit()方法詳解

    Vue中的this.$emit()方法詳解

    這篇文章主要給大家介紹了關(guān)于Vue中this.$emit()方法的相關(guān)資料,this.$emit()是 Vue.js 中一個很有用的方法,可以幫助子組件向父組件傳遞事件,需要的朋友可以參考下
    2023-09-09
  • Vue.js Ajax動態(tài)參數(shù)與列表顯示實現(xiàn)方法

    Vue.js Ajax動態(tài)參數(shù)與列表顯示實現(xiàn)方法

    Vue.js是一個輕巧、高性能、可組件化的MVVM庫,同時擁有非常容易上手的API。下面通過本文給大家介紹vue.js ajax動態(tài)參數(shù)與列表顯示實現(xiàn)方法,感興趣的朋友一起看看吧
    2016-10-10
  • vue3-vite安裝后main.ts文件和tsconfig.app.json文件報錯解決辦法

    vue3-vite安裝后main.ts文件和tsconfig.app.json文件報錯解決辦法

    Vue.js是一個流行的JavaScript框架,它可以幫助開發(fā)者構(gòu)建交互式Web應(yīng)用程序,這篇文章主要給大家介紹了關(guān)于vue3-vite安裝后main.ts文件和tsconfig.app.json文件報錯解決辦法,需要的朋友可以參考下
    2023-12-12
  • antd vue 如何調(diào)整checkbox默認(rèn)樣式

    antd vue 如何調(diào)整checkbox默認(rèn)樣式

    這篇文章主要介紹了antd vue 如何調(diào)整checkbox默認(rèn)樣式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • 一文帶你了解vite對瀏覽器的請求做了什么

    一文帶你了解vite對瀏覽器的請求做了什么

    Vite是一種新型前端構(gòu)建工具,能夠顯著提升前端開發(fā)體驗,下面這篇文章主要給大家介紹了關(guān)于vite對瀏覽器的請求做了什么的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2021-12-12
  • vue實現(xiàn)動態(tài)列表點擊各行換色的方法

    vue實現(xiàn)動態(tài)列表點擊各行換色的方法

    今天小編就為大家分享一篇vue實現(xiàn)動態(tài)列表點擊各行換色的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • vue使用canvas手寫輸入識別中文

    vue使用canvas手寫輸入識別中文

    這篇文章主要介紹了vue使用canvas手寫輸入識別中文,工作時遇到一些項目如:系統(tǒng)上的輸入法使用不方便,客戶要求做一個嵌入web網(wǎng)頁的手寫輸入法。下面我們來看看文章得具體描述吧
    2021-11-11
  • 基于vue+echarts實現(xiàn)柱狀圖漸變色效果(每個柱子顏色不同)

    基于vue+echarts實現(xiàn)柱狀圖漸變色效果(每個柱子顏色不同)

    前段時間的vue項目中用到了echarts柱狀圖,由于UI設(shè)計稿中要求使用漸變色,并且每個柱子的顏色不同,于是做了一番研究,現(xiàn)將我的實現(xiàn)方案分享如下
    2024-05-05
  • vue3不同語法格式對比的實例代碼

    vue3不同語法格式對比的實例代碼

    vue3發(fā)布已有一段時間了,文檔也大概看了一下,不過對于學(xué)一門技術(shù),最好的方法還是實戰(zhàn),這篇文章主要給大家介紹了關(guān)于vue3不同語法格式對比的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • vue引入組件的幾種方法代碼示例

    vue引入組件的幾種方法代碼示例

    vue的一個強大功能就是組件化開發(fā),下面這篇文章主要給大家介紹了關(guān)于vue引入組件的幾種方法,文中給出了詳細的代碼及圖文介紹,需要的朋友可以參考下
    2024-04-04

最新評論

得荣县| 仁布县| 密山市| 章丘市| 贵德县| 台湾省| 舞钢市| 巴彦淖尔市| 竹溪县| 三穗县| 凤阳县| 昆山市| 陆河县| 陕西省| 闽清县| 临泉县| 界首市| 翁牛特旗| 南汇区| 肇源县| 长汀县| 齐河县| 济宁市| 凯里市| 安仁县| 昆山市| 台湾省| 雅江县| 永修县| 高平市| 天峨县| 宜昌市| 达尔| 贵定县| 绍兴市| 哈巴河县| 洛南县| 黄山市| 澎湖县| 仙居县| 交口县|