国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

vuex入門

weakish / 557人閱讀

摘要:使用,引入之后用進行引用。在模板中引入們剛建的文件,并在模板中用輸出的值。在文件中加入兩個改變的方法。和單純的全局對象有以下兩點不同的狀態存儲是響應式的。改變中的狀態的唯一途徑就是顯式地提交。

vuex 是什么?

Vuex 是一個專為 Vue.js 應用程序開發的狀態管理模式。
通俗的解釋就是,Vuex 就是為 vue 組件之間進行數據共享而開發的插件。

vuex 什么時候用? 實現數據通信的方式

對于父子組件,可以通過 props 實現數據通信;
不同非父子組件可以引入 vue 對象通過 $emit/$on 實現;
也可以通過不大優雅的 localStorage 存儲;

vuex 是另一種解決方案,如果不同組件有大量數據需要共享通信,vuex 會更適合。

開始

首先搭建一個 vue 項目,安裝 vuex。

NPM
npm n install vuex --save

需要注意的是這里一定要加上 –save,因為你這個包我們在生產環境中是要使用的。

Yarn
yarn add vuex
直接下載 / CDN 引用

https://unpkg.com/vuex
下載到本地,引入


并不推薦用 script 方式引入

在項目中新建一個 vuex 文件夾,并在文件夾下新建 store.js 文件,文件中我們的 vue 和vuex。

import Vue from "vue";
import Vuex from "vuex";

使用 vuex,引入之后用 Vue.use 進行引用。

Vue.use(Vuex);
初嘗試 demo

1.在 store.js 文件里增加一個常量對象。

const state = {
    count:1
}

2.用 export default 輸出對象,讓外部可以引用。

export default new Vuex.Store({
    state
})

3.新建一個 vue 組件,在 components 文件夾下,命名 counter.vue。 在模板中引入們剛建的 store.js 文件,并在模板中用 {{ $store.state.count }} 輸出 count 的值。


4.在 store.js 文件中加入兩個改變 state 的方法。

const mutations={
    add(state){
        state.count++;
    },
    reduce(state){
        state.count--;
    }
}
export default new Vuex.Store({
    state,
    mutations
})

5.在 counter.vue 模板中加入兩個按鈕,并調用 mutations 中的方法。

點擊按鈕可以看到count數字的變化。

訪問state數據 1.通過 computed 計算屬性獲取到 count
computed: {
    count () {
      return this.$store.state.count
    }
}

或者

computed: {
    count () {
      return store.state.count
    }
}

在模板里直接訪問 {{ count }} 變能獲取到,
$store 即掛載在vue實例屬性上的 store 對象
通過 this.$store 可以訪問 store 實例后的屬性和方法

2.通過 mapState 輔助函數獲取到 count
import { mapState } from "vuex"
 computed: mapState({
    // 箭頭函數可使代碼更簡練
    count: state => state.count,
  })

我們也可以給 mapState 傳一個字符串數組。

computed: mapState([
  // 映射 this.count 為 store.state.count
  "count"
])

mapState 可以接受函數也可以接受一個數組,最后都統一返回一個 key value 形式的對象,使用數組意味著 key 和 value 名稱是一樣的。
當你需要獲取多個數據時,mapState 可使代碼更簡練。

3.對象展開運算符

如果 computed 需要寫多個對象,展開運算符會是一個很棒的選擇。

computed:{
    ...mapState(["count"]),
    ...mapGetters(["count"])
}
Mutations 修改狀態

狀態可以理解為 state 數據,我們不能直接改變 this.$store.state 里的數據,需要調用 vuex 本身封裝出來的方法,而這也恰好體現了單一數據流,

$store.commit( )

Vuex 提供了 commit 方法來修改狀態,我們看一下在 demo 中所寫的。


const mutations={
    add(state){
        state.count++;
    },
    reduce(state){
        state.count--;
    }
}
傳值(payload)

mutations的方法,第一個默認就是 state,第二個參數才是你所傳遞的

const mutations={
    add(state,n){
        state.count+=n;
    }
}
 

除了字符串數字類型,還可以傳遞對象裝載更多數據

mutations: {
  add (state, payload) {
    state.count += payload.amount
  }
}
store.commit(add, {
  amount: 10
})
// 也可以
store.commit({
  type: "add",
  amount: 10
})
獲取 Mutations方法
import { mapState,mapMutations } from "vuex";
methods:mapMutations([
    "add","reduce"
])
// 也可以
methods:mapMutations({
  add: "add",
  reduce: "reduce"
})

methods 還可以

methods: {
    ...mapMutations([
        "add","reduce"
    ]),
    other () {
        
    }
}

推薦使用數組方式,更為簡單方便

getters 計算過濾

在 store.js 里用 const 聲明我們的 getters 對象

const getters = {
  evenOrOdd: state => state.count % 2 === 0 ? "even" : "odd"
}

把寫好的 getters 傳給 Vuex.Store 對象,輸出

export default new Vuex.Store({
    state,
    mutations,
    getters
})

在組件里應用

import {mapState, mapMutations, mapGetters} from "vuex";
computed:{
    ...mapState(["count"]),
    ...mapGetters(["evenOrOdd"]),
},

{{ evenOrOdd }}

便能獲取到 evenOrOdd 的值

actions 異步修改狀態

Action
類似于 mutation,不同點是,Action 提交的是 mutation,actions 是異步的改變狀態,而 Mutations 是同步改變狀態。
注冊一個簡單的 actions:

const actions ={
    addAction(context){
        context.commit("add",10)
    },
    reduceAction({commit}){
        commit("reduce")
    }
}
export default new Vuex.Store({
    state,
    mutations,
    getters,
    actions
})

context是上下文對象,也就是就是 store 對象
通過參數解構可以直接拿到commit
和mutation類似
直接調用 mutation 方法是 commit 調用,Action方法是使用 dispatch
也可以使用輔助函數

methods:{
    ...mapMutations(["add","reduce"]),
    ...mapActions(["addAction","reduceAction"])
},
 
 

Actions 支持同樣的載荷方式和對象方式進行分發:

// 以載荷形式分發
store.dispatch("addAction", {
  amount: 10
})

// 以對象形式分發
store.dispatch({
  type: "addAction",
  amount: 10
})

actions 本身是用 promise 封裝實現,dispatch 依然返回 promise
所以你可以

store.dispatch("actionA").then(() => {
  // ...
})

也可以

actions: {
  actionB ({ dispatch, commit }) {
    return dispatch("actionA").then(() => {
      commit("someOtherMutation")
    })
  } 
}

actions 往往用于結合 axios 實現異步請求數據

Module

大型項目多人開發大量的數據共享時,建議使用 Module

之前寫法

export default new Vuex.Store({
    state,
    mutations,
    getters,
    actions
})

Module 寫法

const moduleA = {
  state: { ... },
  mutations: { ... },
  actions: { ... },
  getters: { ... }
}

const moduleB = {
  state: { ... },
  mutations: { ... },
  actions: { ... }
}

const store = new Vuex.Store({
  modules: {
    a: moduleA,
    b: moduleB
  }
})

調用從 store.state.count
應寫成

store.state.a.count

若共享數據很多,可以給數據分組。

總結

state 用于數據存儲

Getter 相當于 state 的計算屬性

Mutation 是改變 state 的方法

Action 是異步改變,提交給 Mutation

分別對應輔助函數 mapState,mapGetter,mapMutation,mapAction

commit 調用 Mutation 方法

dispatch 是調用 Action 方法

最后看 vuex 流程圖,是不是大徹大悟了?

Vuex 思想理念

vuex 使用單一狀態樹——用一個對象就包含了全部的應用層級狀態。這也意味著,每個應用將僅僅包含一個 store 實例。單一狀態樹能夠直接地定位任一特定的狀態片段,在調試的過程中也能輕易地取得整個當前應用狀態的快照。

每一個 Vuex 應用的核心就是 store(倉庫)。store 基本上就是一個容器,它包含著應用中大部分的狀態 (state)。Vuex 和單純的全局對象有以下兩點不同:

  1、Vuex 的狀態存儲是響應式的。當 Vue 組件從 store 中讀取狀態的時候,若 store 中的狀態發生變化,那么相應的組件也會相應地得到高效更新

  2、不能直接改變 store 中的狀態。改變 store 中的狀態的唯一途徑就是顯式地提交 (commit) mutation。這樣使得可以方便地跟蹤每一個狀態的變化,從而能夠實現一些工具幫助更好地了解應用
Vuex 背后的基本思想,借鑒了 Flux、Redux 和 The Elm Architecture

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/103553.html

相關文章

  • Vuex10分鐘入門

    摘要:它采用集中式存儲管理應用的所有組件的狀態,并以相應的規則保證狀態以一種可預測的方式發生變化。寫需要的組件創建一個組件,懟下面的內容,你喜歡彬哥哪一點創建一個展示組件我喜歡彬哥打開,刪掉沒用的東西,直接懟下面的代碼,到這里,架子就搭好了。 通過本文你將: 1.知道什么是Vuex. 2.知道為什么要用Vuex. 3.能跑一個Vuex的例子。 4.了解相關概念,面試的時候能說出一個所以然 5...

    idisfkj 評論0 收藏0
  • 超簡單入門Vuex小示例

    摘要:寫在前面本文旨在通過一個簡單的例子,練習的幾個常用方法,使初學者以最快的速度跑起來一個的示例。生成基于的項目基于腳手架生成一個項目常用命令項目名進入項目目錄,使用先試著跑一下。子組件可以修改父組件和自己的數據。 寫在前面 本文旨在通過一個簡單的例子,練習vuex的幾個常用方法,使初學者以最快的速度跑起來一個vue + vuex的示例。 學習vuex需要你知道vue的一些基礎知識和用法。...

    linkin 評論0 收藏0
  • Vuex入門到放棄(webpack自動導入模塊 命名空間 輔助函數)

    摘要:從入門到放棄自動導入模塊命名空間輔助函數什么是什么是狀態管理,驅動應用的數據源,以聲明方式將映射到視圖,響應在上的用戶輸入導致的狀態變化。最后重點來了外包在職萌新求內推位置廣州 Vuex從入門到放棄(webpack自動導入模塊 命名空間 輔助函數) 1.什么是vuex 1.1 什么是狀態管理 state,驅動應用的數據源; view,以聲明方式將 state 映射到視圖; actio...

    blankyao 評論0 收藏0
  • Vuex 入門到進階

    先說一下Vuex到底是什么? Vuex 是一個專門為 vue.js 應用程序開發的狀態管理模式 這個狀態我們可以理解為在 data 中的屬性,需要共享給其他組件使用的部分 也就是說,我們需要共享的數據,可以使用 vuex 進行統一集中式的管理 喜歡看代碼學習的的可直接下載下方 Demo https://gitee.com/jiangliyue/... Vuex中的五種基本對象 state...

    mylxsw 評論0 收藏0
  • Vuex入門到上手教程

    摘要:它采用集中式存儲管理應用的所有組件的狀態,并以相應的規則保證狀態以一種可預測的方式發生變化。這需要對短期和長期效益進行權衡。改變中的狀態的唯一途徑就是顯式地提交。在里使用進行延遲執行。上下文對象,這里你可以理解稱本身。 這篇文章主要介紹了Vuex入門到上手教程,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧 一、前言 當我們的應用遇到多個組件共享狀態時,會需...

    rollback 評論0 收藏0

發表評論

0條評論

weakish

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<