国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

vue - vuex詳細(xì)講解和modules模塊化的使用

這篇具有很好參考價(jià)值的文章主要介紹了vue - vuex詳細(xì)講解和modules模塊化的使用。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

vuex 簡(jiǎn)介

Vuex 是一個(gè)專為 Vue.js 應(yīng)用程序開發(fā)的狀態(tài)管理模式。它采用集中式存儲(chǔ)管理應(yīng)用的所有組件的狀態(tài),并以相應(yīng)的規(guī)則保證狀態(tài)以一種可預(yù)測(cè)的方式發(fā)生變化。
通俗的來說,vuex是用于當(dāng)某一狀態(tài)需要在多個(gè)組件中共享,方便我們使用并追蹤這些狀態(tài)時(shí)使用。

1,vuex的總體結(jié)構(gòu)

vuex的總體結(jié)構(gòu)分為 modules下面的所有子模塊和根模塊(即全局狀態(tài)) 這里我把rootState這個(gè)根模塊放到了modules文件夾的外面,當(dāng)然也可以放到里面;最后就是在index 統(tǒng)一進(jìn)行整合。

vue - vuex詳細(xì)講解和modules模塊化的使用

2,各子模塊的內(nèi)部結(jié)構(gòu)及作用

這是vuex的內(nèi)部代碼結(jié)構(gòu),所有的子模塊都是一樣的;
state:存放數(shù)據(jù)狀態(tài);
action:指派mutation ;
mutation:修改state里面的狀態(tài);
getter:側(cè)重于對(duì)數(shù)據(jù)的再次加工;
mdules:用于模塊化;

我們更傾向于把異步請(qǐng)求放到action里面,當(dāng)然vuex官方也有意這么做;一是為了追蹤狀態(tài),二是為了做代碼隔離,通常不受控的代碼集中到action;受控的操作放到 mutation中,mutation只做純函數(shù)的狀態(tài)改變;

dialog.js

/**
 * 彈窗組件模塊 屬于子模塊
 */
const state = {
  dialog: '我是dialog',
};

const actions = {
  // 把 commit屬性從 context里面解構(gòu)出來
  setDialog: ({ commit }, dia) => commit('commitDialog', dia),
};

// 使用 mutation更新 state
const mutations = {
  commitDialog: (state, dialog) => (state.dialog = dialog),
};

// 把數(shù)據(jù)導(dǎo)出時(shí)可以對(duì)數(shù)據(jù)做一些操作 但不會(huì)改變?cè)瓟?shù)據(jù)
const getters = {
  currentDialog: (state) => state.dialog + '123',
};

export default {
  state,
  mutations,
  actions,
  getters,
  namespaced: true,
};
// namespaced: true  命名空間這一行一定要寫,這是vuex尋找子組件的依據(jù);

注意:這個(gè)設(shè)計(jì)和組件傳值一樣,是一個(gè)單向的數(shù)據(jù)流:是為了方便管理各個(gè)狀態(tài),知道狀態(tài)在哪一步發(fā)生了改變,便于狀態(tài)的維護(hù)和使用;

3,index 文件的結(jié)構(gòu)

上面是引入各個(gè)子模塊的文件,下面在modules對(duì)象里面使用,要注意根模塊一定要放在modules外面,因?yàn)樗翘厥獾模@邊用擴(kuò)展運(yùn)算符直接把roortState解構(gòu)進(jìn)來了。
注意:這里面用到了持久化緩存插件 vuex-persistedstate 解決了vuex刷新頁(yè)面狀態(tài)丟失的問題,通過這個(gè)插件把vuex里面的數(shù)據(jù)都儲(chǔ)存到了localStorage里面;當(dāng)然你也可以放到sessionStorage里面;只不過要這樣寫:
plugins: [createPersistedState({
storage: window.sessionStorage
})]

index.js

import Vue from 'vue';
import Vuex from 'vuex';
// 持久化緩存
import createPersistedState from 'vuex-persistedstate';
// 下面引入子模塊
import rootState from './rootState'; // 根模塊狀態(tài)管理引入
import dialog from './modules/dialog';
import videoState from './modules/videoState';

Vue.use(Vuex);

export default new Vuex.Store({
  ...rootState, // 這里存放的是根模塊 也就是全局模塊
  modules: {
    dialog,
    videoState,
  },
  // 把vuex里面的所有數(shù)據(jù)都儲(chǔ)存到了localStorage里面 不用擔(dān)心刷新數(shù)據(jù)丟失的問題
  plugins: [createPersistedState()],
});

4,開始使用

這是對(duì)以下代碼的使用說明,主要配合了vuex輔助函數(shù)來進(jìn)行使用;

1,getDialog() 方法使用子模塊dialog 里面的setDialog方法改變了子模塊的狀態(tài);
2,getDialogGetter() 方法使用子模塊dialog 里面的Getter屬性獲取了改變之后的數(shù)據(jù);
Getter用于對(duì)Store中的數(shù)據(jù)進(jìn)行加工,處理形成新的數(shù)據(jù),不會(huì)修改Store中的原數(shù)據(jù),類似計(jì)算屬性。但Store中數(shù)據(jù)發(fā)生變化,Getter的數(shù)據(jù)也會(huì)跟著變化;
3,getRootState() 方法使用根組件的setRootStatue方法改變了全局狀態(tài),注意:獲取根組件的方法時(shí) 后面要加上 {root:true} 來標(biāo)明這是根組件;可以參考我下面的寫法;
4 ,getRootState2() 方法可以直接獲取根組件里面的狀態(tài);這里在業(yè)務(wù)邏輯上可以做一些判斷什么的

頁(yè)面中使用:

<template>
  <!-- 父組件 -->
  <div class="dialog">
    <button @click="getDialog">使用子組件dialog里面的方法改變狀態(tài)</button>
    <br />
    <button class="_getter" @click="getDialogGetter">獲取彈窗組件getter返回的數(shù)據(jù)</button>
    <br>
    <button class="_getter" @click="getRootState">使用根模塊里面的方法</button>
    <br>
    <button class="_getter" @click="getRootState2">獲取根模塊里面的數(shù)據(jù)</button>
  </div>
</template>

<script>
// 1.引入輔助函數(shù)
import { mapActions, mapGetters, mapMutations, mapState } from 'vuex';
export default {
  name: '',
  mixins: [],
  components: {
  },
  props: {},
  data() {
    return {
    };
  },
  computed: {
    // mapState 和 mapGetters
    ...mapState('dialog', ['dialog']),

    // 這里想要訪問根模塊里面的方法  需要這樣寫后面加上 {root:true}
    ...mapState(['rootStatue',{root:true}]),
    ...mapGetters('dialog', ['currentDialog']),

  },
  watch: {},
  created() {},
  mounted() {},
  methods: {
    // 2,使用
    ...mapActions('dialog', ['setDialog']),

    // 這里想要訪問根模塊里面的方法  需要這樣寫后面加上 {root:true}
    ...mapActions(['setRootStatue',{root:true}]),
    
	// 使用子組件dialog里面的方法改變狀態(tài)
    getDialog() {
      console.log('之前的數(shù)據(jù):', this.dialog);
      // 3,改狀態(tài)
      this.setDialog('nihao');
      //4,查看是否改動(dòng)成功  改動(dòng)成功
      console.log('之后的數(shù)據(jù):', this.dialog);
    },

    // 獲取getter里面的內(nèi)容
    getDialogGetter() {
      let dialogGetter = this.currentDialog;
      console.log('獲取getter里面返回的數(shù)據(jù):', dialogGetter);
    },

    // 使用根模塊里面的方法改變狀態(tài)
    getRootState(){
      console.log('之前的數(shù)據(jù):', this.rootStatue);
      this.setRootStatue('false')
      console.log('改變后的數(shù)據(jù):', this.rootStatue);
    },

    // 獲取根模塊里面的數(shù)據(jù)
    getRootState2(){
      console.log("根模塊的數(shù)據(jù):",this.rootStatue);
    },

  },
};
</script>

<style scoped lang="scss">
.tipsDialog {
  cursor: pointer;
}
._getter {
  display: block;
  margin-top: 10px;
}
</style>

rootState根組件里面的結(jié)構(gòu)

/**
 * 根模塊 儲(chǔ)存全局狀態(tài)管理 
 */
 const state = {
    rootStatue:'true',
  };
  // 使用 mutation更新 state
  const mutations = {
    commitRootStatue: (state, sta) => (state.rootStatue = sta),
  
  };
  const actions = {
    setRootStatue:({commit},sta)=> commit('commitRootStatue',sta,)
  };
  
  const getters = {
    
  };
  
  export default {
    state,
    mutations,
    actions,
    getters,
    namespaced: true,
  };
  

5,總結(jié)

vuex中一共有五個(gè)狀態(tài) State Getter Mutation Action Module ;需要知道他們的關(guān)系和側(cè)重點(diǎn);

  • Action: 側(cè)重請(qǐng)求數(shù)據(jù)以及對(duì)業(yè)務(wù)邏輯的判斷處理等;

  • Mutation: 側(cè)重于對(duì)state里面的狀態(tài)的修改;

  • Getter : 側(cè)重于對(duì)數(shù)據(jù)的再次加工和處理,如果你對(duì)數(shù)據(jù)的修改或使用卻不想改變?cè)瓟?shù)據(jù);那么你可以使用它;

  • Modules : 側(cè)重于對(duì)多個(gè)狀態(tài)的管理和分享;文章來源地址http://www.zghlxwxcb.cn/news/detail-462127.html

到了這里,關(guān)于vue - vuex詳細(xì)講解和modules模塊化的使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【Node.js】module 模塊化

    Node.js 是一個(gè)獨(dú)立的 JavaScript 運(yùn)行環(huán)境,能獨(dú)立執(zhí)行 JS 代碼,可以用來編寫服務(wù)器后端的應(yīng)用程序?;贑hrome V8 引擎封裝,但是沒有 DOM 和 BOM。Node.js 沒有圖形化界面。 node -v 檢查是否安裝成功。 node index.js 執(zhí)行該文件夾下的 index.js 文件。 commonJS 寫法 ES 寫法 需要先 npm ins

    2024年02月07日
    瀏覽(27)
  • 前端框架的CSS模塊化(CSS Modules)

    前端框架的CSS模塊化(CSS Modules)

    創(chuàng)作紀(jì)念日之際,來給大家分享一篇文章吧 聚沙成塔·每天進(jìn)步一點(diǎn)點(diǎn) 前端入門之旅:探索Web開發(fā)的奇妙世界 歡迎來到前端入門之旅!感興趣的可以訂閱本專欄哦!這個(gè)專欄是為那些對(duì)Web開發(fā)感興趣、剛剛踏入前端領(lǐng)域的朋友們量身打造的。無論你是完全的新手還是有一些

    2024年03月27日
    瀏覽(22)
  • GuLi商城-前端基礎(chǔ)Vue-使用Vue腳手架進(jìn)行模塊化開發(fā)

    GuLi商城-前端基礎(chǔ)Vue-使用Vue腳手架進(jìn)行模塊化開發(fā)

    自己親自實(shí)踐: mac安裝webpack 前提:已經(jīng)安裝node.js,可以參考 https://blog.csdn.net/ZHOU_VIP/article/details/128807814?spm=1001.2014.3001.5501 webpack 安裝 首先確認(rèn)一下是否已經(jīng)安裝: webpack -v 如果提示? command not found: webpack ,則表示未安裝。 在Mac OS上安裝webpack,需要先安裝Node.js和npm。建議

    2024年02月11日
    瀏覽(25)
  • ES6之Promise、Class類與模塊化(Modules)

    ES6之Promise、Class類與模塊化(Modules)

    Promise 是 ES6 引入的一種用于 處理異步操作 的對(duì)象。 它解決了傳統(tǒng)回調(diào)函數(shù)(callback)模式中容易出現(xiàn)的 回調(diào)地獄 和代碼可讀性差的問題。 Promise 對(duì)象有三種狀態(tài): Pending (進(jìn)行中): 初始化狀態(tài),表示異步操作還在進(jìn)行中。 Fulfilled (已成功): 表示異步操作執(zhí)行成功,并

    2024年02月10日
    瀏覽(94)
  • Node.js開發(fā)、CommondJS 、ES-Module模塊化設(shè)計(jì)

    Node.js開發(fā)、CommondJS 、ES-Module模塊化設(shè)計(jì)

    目錄 ?Node.js是什么 基礎(chǔ)使用 Node的REPL 全局變量 ?模塊化設(shè)計(jì) CommondJS規(guī)范 ?基礎(chǔ)使用exports和module.exports require ?CommondJS優(yōu)缺點(diǎn) AMD和CMD規(guī)范 ES_Module ?基本使用方法 導(dǎo)出 導(dǎo)入 ?結(jié)合使用 默認(rèn)導(dǎo)出 ES Module解析流程 ?Node與瀏覽器的對(duì)比 ?在瀏覽器中,HTML與CSS交給Blink處理,如果其

    2023年04月21日
    瀏覽(31)
  • 基于Basys2的數(shù)碼管動(dòng)態(tài)掃描module(verilog)的模塊化設(shè)計(jì)

    基于Basys2的數(shù)碼管動(dòng)態(tài)掃描module(verilog)的模塊化設(shè)計(jì)

    ? ? 目錄 一、數(shù)碼管工作原理 ?二、Verilog模塊設(shè)計(jì) 1、原理 (1)動(dòng)態(tài)掃描的優(yōu)點(diǎn): (2)動(dòng)態(tài)掃描原理簡(jiǎn)介: 2、Verilog模塊的設(shè)計(jì) (1)分頻器: ?2、譯碼器模塊: 3、動(dòng)態(tài)掃描模塊: 4、頂層模塊: 三、寫在最后: 在大二下學(xué)期學(xué)習(xí)《Verilog與FPGA實(shí)現(xiàn)》的時(shí)候鯤鯤給我們布

    2024年02月09日
    瀏覽(18)
  • Vue待辦事項(xiàng)(組件,模塊化)

    //html頁(yè)面代碼 !DOCTYPE html html ?? ?head ?? ??? ?meta charset=\\\"utf-8\\\" ?? ??? ?title/title ?? ??? ?style ?? ??? ??? ?* { ?? ??? ??? ??? ?padding: 0; ?? ??? ??? ??? ?margin: 0; ?? ??? ??? ?} ?? ??? ??? ?ul, ?? ??? ??? ?ol { ?? ??? ??? ??? ?list-style: none; ?? ?

    2024年01月21日
    瀏覽(32)
  • Vue的模塊化開發(fā)初探

    Vue的模塊化開發(fā)初探

    Vue是一個(gè)漸進(jìn)式JavaScript框架,可以按需引入部分功能,而不必全量引入整個(gè)框架。 2.1 下載必須模塊 在瀏覽器輸入: https://unpkg.com/vue@3/dist/vue.esm-browser.js ,右鍵另存為,保存到demo.html文件同級(jí)目錄下。 2.2 安裝Live Server插件 在VSCode插件市場(chǎng)搜索Live Server并安裝,如下圖: 2.

    2024年04月10日
    瀏覽(26)
  • JDK 9 模塊化系統(tǒng) (Module System) 和 多版本兼容 Jar (Multi-Release Jar)

    JDK 9 模塊化系統(tǒng) (Module System) 和 多版本兼容 Jar (Multi-Release Jar)

    博文目錄 Java 9引入了模塊化系統(tǒng)的主要原因是為了解決Java平臺(tái)面臨的復(fù)雜性和可維護(hù)性方面的挑戰(zhàn)。以下是一些采用模塊化系統(tǒng)的主要原因: 更好的代碼組織:傳統(tǒng)的Java應(yīng)用程序通常由大量的JAR文件組成,這些JAR文件之間的依賴關(guān)系可能變得非常復(fù)雜。模塊化系統(tǒng)允許開發(fā)

    2024年02月04日
    瀏覽(20)
  • 前端基礎(chǔ)(Vue的模塊化開發(fā))

    前端基礎(chǔ)(Vue的模塊化開發(fā))

    ? 前言 :前面學(xué)習(xí)了前端HTML、CSS樣式、JavaScript以及Vue框架的簡(jiǎn)單適用,接下來運(yùn)用前端模塊化編程的思想,繼續(xù)學(xué)習(xí)Vue框架,完成自己項(xiàng)目項(xiàng)目的搭建。 目錄 響應(yīng)式基礎(chǔ) ref?reactive 學(xué)習(xí)成果展示 Vue項(xiàng)目搭建 搭建自己的vue項(xiàng)目 總結(jié)? 關(guān)于ref和reactive,官方解釋如下,另外一

    2024年02月12日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包