欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

通過一個(gè)簡(jiǎn)單的例子學(xué)會(huì)vuex與模塊化

 更新時(shí)間:2017年11月22日 09:15:58   作者:蘇簡(jiǎn)  
這篇文章主要給大家介紹了關(guān)于如何通過一個(gè)簡(jiǎn)單的例子學(xué)會(huì)vuex與模塊化的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。

前言

Vuex 強(qiáng)調(diào)使用單一狀態(tài)樹,即在一個(gè)項(xiàng)目里只有一個(gè) store,這個(gè) store 集中管理了項(xiàng)目中所有的數(shù)據(jù)以及對(duì)數(shù)據(jù)的操作行為。但是這樣帶來的問題是 store 可能會(huì)非常臃腫龐大不易維護(hù),所以就需要對(duì)狀態(tài)樹進(jìn)行模塊化的拆分。

這篇文章預(yù)設(shè)你已經(jīng)了解vue相關(guān)的基礎(chǔ)知識(shí),因此本文不再贅述。需要學(xué)習(xí)的朋友可以參考這篇文章:http://www.dbjr.com.cn/article/110212.htm

對(duì)vuex的定位和解釋可以看官方文檔,說的很詳細(xì)了,需要的朋友也可以通過這篇文章進(jìn)行詳細(xì)的了解:http://www.dbjr.com.cn/article/111582.htm

本文主要從實(shí)用的角度寫一寫如何在實(shí)際項(xiàng)目中使用vuex,例子真的很簡(jiǎn)單(簡(jiǎn)陋),但是主要是理解這種思維就好。

示例教程

例子是在vue-cli基礎(chǔ)上構(gòu)建的,以下是src文件下的內(nèi)容目錄。

├── App.vue
├── components // 組件文件夾
│ ├── tab1.vue
│ ├── tab2.vue
│ ├── tab3.vue
│ └── tab4.vue
├── main.js // vue的主文件入口
├── router // vue-router文件
│ └── index.js
└── store // vuex文件
 ├── action.js // action
 ├── getter.js // getter
 ├── index.js // vuex的主文件
 ├── module // 模塊文件
 │ ├── tab2.js
 │ └── tab3.js
 ├── mutation-type.js // mutation常量名文件
 └── mutation.js // mutation

效果是這樣的(不要嫌棄簡(jiǎn)陋啊啊啊)

在這個(gè)例子里,把文檔里提到的vuex的相關(guān)知識(shí)都使用了一遍,包括模塊相關(guān)的知識(shí),基本把一般的使用場(chǎng)景都覆蓋了吧。

那不廢話了,開始吧。

首先app.vue和router兩部分是和路由相關(guān),就是很簡(jiǎn)單的東西,看看文檔就能了解。

vuex的模塊化

在寫這個(gè)例子之前看了很多的開源項(xiàng)目的代碼,一開始蠻新鮮的,畢竟之前項(xiàng)目中并沒有深度使用過vuex,基本就是一個(gè)store.js里把vuex的功能就都完成了,但是項(xiàng)目復(fù)雜肯定不能這么寫,正好現(xiàn)在有這個(gè)需求,我就想寫個(gè)例子理一理這方面的思路。結(jié)果還是蠻簡(jiǎn)單的。

store文件里的內(nèi)容就是按照vuex五個(gè)核心概念建立的,這么做的好處對(duì)于梳理業(yè)務(wù)邏輯和后期維護(hù)都是極大的方便,比如mutation.js和mutation-type.js這兩個(gè)文件:

// mutation-type.js

const CHANGE_COUNT = 'CHANGE_COUNT';


export default {
 CHANGE_COUNT
}
// mutation.js

import type from './mutation-type'

let mutations = {
 [type.CHANGE_COUNT](state) {
 state.count++
 }
}

export default mutations

將mutation中的方法名單獨(dú)作為常量提取出來,放在單獨(dú)的文件中,用的時(shí)候引用相關(guān)的內(nèi)容,這樣非常便于管理和了解有哪些方法存在,很直觀。另一方面,有時(shí)候可能需要用到action,可以使用相同的方法名,只要再引入常量的文件就行。

// action.js
import type from './mutation-type'

let actions = {
 [type.CHANGE_COUNT]({ commit }) {
 
 commit(type.CHANGE_COUNT)
 
 }
}

export default actions

怎么樣,這樣是不是看起來就沒有寫在一個(gè)文件里那么亂了。

...mapGetters和...mapActions

tab1.vue里:

// tab1.vue
<template>
 <div>
 <p>這是tab1的內(nèi)容</p>
 <em @click="add">{{count}}</em>
 <p>getter:{{NewArr}}</p>
 </div>
</template>


<script>
import { mapActions, mapGetters } from "vuex";
import type from "../store/mutation-type";
export default {
 computed: {
 ...mapGetters([
 'NewArr'
 ]),
 count: function() {
 return this.$store.state.count;
 },
 },
 methods: {
 ...mapActions({
 CHANGE_COUNT: type.CHANGE_COUNT
 }),
 add: function() {
 this.CHANGE_COUNT(type.CHANGE_COUNT);
 }
 }
};
</script>

<style lang="" scoped>

</style>

index.js文件里:

import Vuex from 'vuex'
import Vue from 'vue'
import actions from './action'
import mutations from './mutation'
import getters from './getter'
import tab2 from './module/tab2'
import tab3 from './module/tab3'

Vue.use(Vuex)

let state = {
 count: 1,
 arr:[]
}


let store = new Vuex.Store({
 state,
 getters,
 mutations,
 actions,
 modules:{
 tab2,tab3
 }
 
})

export default store

vuex提供了一種叫做輔助函數(shù)的東西,他的好處能讓你在一個(gè)頁(yè)面集中展示一些需要用到的東西,并且在使用的時(shí)候也可以少寫一些內(nèi)容,不過這個(gè)不是必須,根據(jù)自己需要取用。

需要說明的是,他們兩個(gè)生效的地方可不一樣。

...mapGetters寫在本頁(yè)面的計(jì)算屬性中,之后就可以像使用計(jì)算屬性一樣使用getters里的內(nèi)容了。

...mapActions寫在本頁(yè)面的methods里面,既可以在其他方法里調(diào)用,甚至可以直接寫在@click里面,像這樣:

<em @click="CHANGE_COUNT">{{count}}</em>

醬紫,tab1里面的數(shù)字每次點(diǎn)擊都會(huì)自增1。

mudule

vuex的文檔里對(duì)于模塊這部分寫的比較模糊,還是得自己實(shí)際使用才能行。

在本例子中,我設(shè)置了兩個(gè)模塊:tab2和tab3,分別對(duì)應(yīng)著同名的兩個(gè)組件,當(dāng)然,我這樣只是為了測(cè)試,實(shí)際看tab2就可以。

// module/tab2.js
const tab2 = {
 state: {
 name:`這是tab2模塊的內(nèi)容`
 },
 mutations:{
 change2(state){
  state.name = `我修改了tab2模塊的內(nèi)容`
 }
 },
 getters:{
 name(state,getters,rootState){
  console.log(rootState)
  return state.name + ',使用getters修改'
 }
 }
}

export default tab2;
// tab2.vue
<template>
 <div>
 <p>這是tab2的內(nèi)容</p>
 <strong @click="change">點(diǎn)擊使用muttion修改模塊tab2的內(nèi)容:{{info}}</strong>
 <h4>{{newInfo}}</h4>
 </div>
</template>


<script>
export default {
 mounted() {
 // console.log(this.$store.commit('change2'))
 },
 computed: {
 info: function() {
 return this.$store.state.tab2.name;
 },
 newInfo(){
 return this.$store.getters.name;
 }
 },
 methods: {
 change() {
 this.$store.commit('change2')
 }
 }
};
</script>

<style lang="" scoped>

</style>

這個(gè)例子里主要是看怎么在頁(yè)面中調(diào)用模塊中的stated等。

首先說state,這個(gè)很簡(jiǎn)單,在頁(yè)面中這樣寫就行:

this.$store.steta.tab2(模塊名).name

在本頁(yè)面的mounted中console一下$store,可以看到模塊中,stete加了一層嵌套在state中的。

至于action,mutation,getter,和一般的使用方法一樣,沒有任何區(qū)別。

還有就是,在getter和action中,可以通過rootState獲得根結(jié)構(gòu)的state,mutation中沒有此方法。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • vue中resetFields重置初始值不生效的原因詳解

    vue中resetFields重置初始值不生效的原因詳解

    resetFields 對(duì)整個(gè)表單進(jìn)行重置,將所有字段值重置為空并移除校驗(yàn)結(jié)果,下面這篇文章主要給大家介紹了關(guān)于vue中resetFields重置初始值不生效的原因的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • vue.js動(dòng)態(tài)組件和插槽的使用匯總

    vue.js動(dòng)態(tài)組件和插槽的使用匯總

    這篇文章主要介紹了vue.js動(dòng)態(tài)組件和插槽的使用匯總,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-05-05
  • vue中的router-view組件的使用教程

    vue中的router-view組件的使用教程

    這篇文章主要介紹了vue中的router-view組件的使用教程,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-10-10
  • Vue基于vuex、axios攔截器實(shí)現(xiàn)loading效果及axios的安裝配置

    Vue基于vuex、axios攔截器實(shí)現(xiàn)loading效果及axios的安裝配置

    這篇文章主要介紹了Vue基于vuex、axios攔截器實(shí)現(xiàn)loading效果及axios的安裝配置,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-04-04
  • 詳解如何使用Vue2做服務(wù)端渲染

    詳解如何使用Vue2做服務(wù)端渲染

    本篇文章主要介紹了如何使用Vue2做服務(wù)端渲染 ,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-03-03
  • Vue 實(shí)現(xiàn)高級(jí)穿梭框 Transfer 封裝過程

    Vue 實(shí)現(xiàn)高級(jí)穿梭框 Transfer 封裝過程

    本文介紹了基于Vue2和Element-UI實(shí)現(xiàn)的高級(jí)穿梭框組件Transfer的設(shè)計(jì)與技術(shù)方案,組件支持多項(xiàng)選擇,并能實(shí)時(shí)同步已選擇項(xiàng),包含豎版和橫版設(shè)計(jì)稿,并提供了組件的使用方法和源碼,此組件具備本地分頁(yè)和搜索功能,適用于需要在兩個(gè)列表間進(jìn)行數(shù)據(jù)選擇和同步的場(chǎng)景
    2024-09-09
  • vue監(jiān)聽瀏覽器原生返回按鈕,進(jìn)行路由轉(zhuǎn)跳操作

    vue監(jiān)聽瀏覽器原生返回按鈕,進(jìn)行路由轉(zhuǎn)跳操作

    這篇文章主要介紹了vue監(jiān)聽瀏覽器原生返回按鈕,進(jìn)行路由轉(zhuǎn)跳操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Vue Mint UI mt-swipe的使用方式

    Vue Mint UI mt-swipe的使用方式

    這篇文章主要介紹了Vue Mint UI mt-swipe的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • 關(guān)于vue中如何監(jiān)聽數(shù)組變化

    關(guān)于vue中如何監(jiān)聽數(shù)組變化

    這篇文章主要介紹了關(guān)于vue中如何監(jiān)聽數(shù)組變化,對(duì)vue感興趣的同學(xué),必須得參考下
    2021-04-04
  • vue項(xiàng)目實(shí)現(xiàn)添加圖片裁剪組件

    vue項(xiàng)目實(shí)現(xiàn)添加圖片裁剪組件

    這篇文章主要為大家詳細(xì)介紹了vue項(xiàng)目實(shí)現(xiàn)添加圖片裁剪組件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03

最新評(píng)論