中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

vue中的vuex是什么意思

發布時間:2022-01-01 15:10:32 來源:億速云 閱讀:243 作者:小新 欄目:編程語言

這篇文章將為大家詳細講解有關vue中的vuex是什么意思,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

概念

????Vuex 是一個專為 Vue.js 應用程序開發的狀態管理模式。它采用集中式存儲管理應用的所有組件的狀態,并以相應的規則保證狀態以一種可預測的方式發生變化。

安裝

  1. HTML 中使用 script 標簽引入

<script src="vue.js"></script>
<script src="vuex.js"></script>
  1. Vue項目中使用 npm 下載安裝(需要安裝 Node 環境)

// 下載
npm install vuex --save

// 安裝
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

Vuex 圖示

vue中的vuex是什么意思

Vuex 和單純的全局對象有以下兩點不同:

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

  • 不能直接改變 store 中的狀態。改變 store 中的狀態的唯一途徑就是顯式地提交 (commit) mutation。這樣使得我們可以方便地跟蹤每一個狀態的變化,從而讓我們能夠實現一些工具幫助我們更好地了解我們的應用。

Store

????每一個 Vuex 應用的核心就是 store(倉庫)。“store” 基本上就是一個容器,它包含著你的應用中大部分的狀態 (state)。

State

????驅動應用的數據源,用于保存所有組件的公共數據.。

Getter

????可以將 getter 理解為 store 的計算屬性, getters 的返回值會根據它的依賴被緩存起來,且只有當它的依賴值發生了改變才會被重新計算。

Mutation

????mutations 對象中保存著更改數據的回調函數,該函數名官方規定叫 type, 第一個參數是 state, 第二參數是payload, 也就是自定義的參數。mutation 必須是同步函數。mutations 對象里的方法需要使用 store.commit 調用

Action

????Action 提交的是 mutation 而不是直接變更狀態。action 可以包含任意異步操作。actions 對象里的方法需要使用 store.dispatch 調用。

????Action 函數接受一個與 store 實例具有相同方法和屬性的 context 對象,因此你可以調用 context.commit 提交一個 mutation,或者通過 context.state 和 context.getters 來獲取 state 和 getters。

Module

????由于使用單一狀態樹,應用的所有狀態會集中到一個比較大的對象。當應用變得非常復雜時,store 對象就有可能變得相當臃腫。為了解決以上問題,Vuex 允許我們將 store 分割成模塊(module)。每個模塊擁有自己的 state、mutation、action、getter、甚至是嵌套子模塊——從上至下進行同樣方式的分割。

HTML中 vuex 的使用

<body><p id="app">
    <input type="button" value="+" @click="add">
    {{this.$store.state.count}}
    <input type="button" value="-" @click="reduce">
    {{this.$store.getters.synchro}}
    <input type="button" value="改變為10" @click="changeNum"></p><script src="vue.js"></script><script src="vuex.js"></script><script>
    var store = new Vuex.Store({
        state: {
            count: 0
        },
        getters: {
            synchro(state) {
                return state.count            }
        },
        mutations: {   
            increment(state) {
                state.count++
            },
            inreduce(state) {
                state.count--
            },
            inchange(state, num) {
                state.count = num            }
        },
        actions: {
            change(context, num) {
                context.commit('inchange', num)
            }
        }
    })

    new Vue({
        el: '#app',
        store,
        methods: {
            add() {
                this.$store.commit('increment')
            },
            reduce() {
                this.$store.commit('inreduce')
            },
            changeNum() {
                this.$store.dispatch('change', 10)
            }
        }
    })</script></body>

Vue 項目中 vuex 的使用(兩種)

  1. 把 vuex 寫在 main.js 文件里

import Vue from 'vue'import App from './App'import router from './router'import Vuex from 'vuex'// 全局狀態管理Vue.use(Vuex)Vue.config.productionTip = falsevar store = new Vuex.Store({
  state: {
    num: 0
  },
  mutations: {
    changeNum(state, num){
      state.num += num    }
  }})new Vue({
  el: '#app',
  store,
  router,
  components: { App },
  template: '<App/>'})

????在組件中調用

<template>
	<p>
		<input type="button" value="改變count的值" @click="change">
    	{{this.$store.state.count}}
	<p></template><script>export default {
	name: '',
	data () {
    	return {
		}
    },
    methods: {
		change() {
			this.$store.commit('changeNum', 10)
		}
	}}</script>
  1. 把 vuex 分離出來

????在 src 目錄下創建一個 vuex 目錄,新建 modules 目錄 和 index.js 文件 放到 vuex 目錄下
vue中的vuex是什么意思

????在 main.js 文件里引入 vuex 目錄

import Vue from 'vue'import App from './App'import router from './router'import store from './vuex'Vue.config.productionTip = false/* eslint-disable no-new */new Vue({
  el: '#app',
  store,
  router,
  components: { App },
  template: '<App/>'})

????在 index.js 里寫上如下代碼

import Vue from 'vue'import Vuex from 'vuex'Vue.use(Vuex)let modules = {}const requireAllModules = require.context("./", true, /\.js$/)requireAllModules.keys().forEach(key => {
  let module = requireAllModules(key).default
  if (module && module.name && module.namespaced) {
    modules[module.name] = module  }})export default new Vuex.Store({
  modules: modules,
  strict: process.env.NODE_ENV !== "production"})

????在 modules 目錄下 新建 city.js 文件,里面代碼如下

export default {
  name: "city",
  namespaced: true,
  state: {
    cityName: '',
    cityCode: ''
  },
  getters: {
    getState(state) {
      return state    },
    getCityCode(state) {
      return state.cityCode    }
  },
  mutations: {
    changeCity(state, cityName) {
      state.cityName = cityName    }
  }}

????在組件里設置值

<template>
	<p>
		<ul>
          <li v-for="item in city" @click="handChangeCity(item.name)"></li>
        </ul>
	</p></template><script>import { mapMutations } from 'vuex'   // 引入vuexexport default {
	name: "city",
	data() {
		return {
			city: [
				{ id: 1, name: '北京' }
				{ id: 2, name: '上海' }
				{ id: 3, name: '廣州' }
				{ id: 4, name: '深圳' }
				{ id: 5, name: '廈門' }
			]
		}
	},
	methods: {
		// 修改
		...mapMutations({
			changeCity: "city/changeCity"
		}),
		// 第一種寫法
		handChangeCity(cityName) {
			this.changeCity(cityName)
		}
		// 第二種寫法  不需要使用 ...mapMutations
		handChangeCity(cityName) {
			this.$store.commit('city/changeCity', cityName);
		}
	}}</script>

????在另一個組件里使用

<template>
	<p>
		<p>{{getState.cityName}}</p>
		<p>{{getCityCode}}</p>
	</p></template><script>import { mapGetters} from 'vuex'   // 引入vuexexport default {
	data() {
		return {
		}
	},
	computed: {
	    // 第一種使用方法
	    ...mapGetters({
	    	getState: "city/getState"
	    })
	    // 第二種使用方法
	    ...mapGetters('city', ['getState', 'getCityCode'])
  	}}</script>

關于“vue中的vuex是什么意思”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

广昌县| 渑池县| 大关县| 修水县| 罗田县| 邛崃市| 涿鹿县| 正镶白旗| 呼伦贝尔市| 延寿县| 十堰市| 汤阴县| 金乡县| 莆田市| 金川县| 宣威市| 安泽县| 汨罗市| 中西区| 万全县| 怀柔区| 滨海县| 北安市| 浦北县| 佛冈县| 宜川县| 毕节市| 长沙县| 祁阳县| 南汇区| 芒康县| 安康市| 南靖县| 军事| 潢川县| 衡阳县| 苏尼特左旗| 阜新| 远安县| 吉木萨尔县| 大渡口区|