亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

vue狀態管理實例分析

發布時間:2022-03-07 15:38:10 來源:億速云 閱讀:186 作者:iii 欄目:web開發

這篇文章主要介紹“vue狀態管理實例分析”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“vue狀態管理實例分析”文章能幫助大家解決問題。

場景:一個地圖應用,有個側邊欄,側邊欄里面放著很多選項,選項改變的時候,應用會根據側邊欄的條件請求數據,然后在地圖上放 markers 。頁面可以簡單抽象成如下結構:

// App.vue

<div>

  <sidebar></sidebar>

  <map></map>

</div>

有很多種方式可以來完成上面的需求,我先介紹 2 種常見的做法,最后再給出一個比較另類但很有趣的方案。

1.直接上 vuex

通常來講,有多個組件共享狀態的時候,把共享的狀態丟給 vuex 來處理是個不錯的方案。但是在處理上面那個場景的時候,會顯示的有點「笨重」,因為側邊欄實際上是一個表單,如果使用 vuex 的話,就需要為每個選項定義一套 mutation,失去了直接使用 v-model 的便利。

直接使用組件狀態綁定一個選項

// sidebar.vue

<input v-model="message">

// ...

data () {

  return {

    message: ''

  }

當使用 vuex 綁定一個選項時,多了不少「模板」代碼

// 定義 state, mutation

state: {

  message: ''

},

mutations: {

  updateMessage (state, message) {

    state.message = message

  }

}

// sidebar.vue

<input :value="message" @input="updateMessage">

// ...

computed: {

  ...mapState({

    message: state => state.message

  })

},

methods: {

  updateMessage (e) {

    this.$store.commit('updateMessage', e.target.value)

  }

}

2.將狀態放到父組件上

如果 sidebar 和 map 有一個共同的父級,使用這種方式處理起來會比上面的簡單很多。但是當我們的應用越來越大的時候,往往會把 sidebar 和 map 拆成顆粒度更小的組件,那么通過 props 一層層傳給子組件也會變的非常麻煩。

3.將組件狀態「共享」出來

我們通常把組件內的狀態寫成下面這種形式:

// ...

data () {

  return {

     message: ''

  }

}

實際上,我們可以把 data () {} 中返回的對象單獨提取到外面,作為一個變量,像下面這種寫法:

const state = { message: '' }

// ...

data () {

  return state

}

那么在這個組件初始化過程中,state 對象會被 vue 「響應式化」,這會引出一個有趣的事情:任何組件,只要模版中使用了 state.message ,當 state.message 改變時,頁面都會被同步更新。

知道了這個之后,我們就可以將側邊欄的狀態寫成一個獨立的文件,作為一個模塊引入其他組件中,結構如下:

// state.js

export default { message: '' }

// sidebar.vue

<input v-model="state.message" />

import state from 'path/to/state.js'

// ...

data () {

  return { state }

}

// map.vue

// 在模版中使用側邊欄的狀態

<div>{{ state.message }}</div>

import state from 'path/to/state.js'

// ...

data () {

  return { state }

},

created () {

  // 將側邊欄的狀態作為參數去請求數據

  axios.get('/xxxx', { params: state })

}

這樣做的一個好處是,既可以在 sidebar.vue 中把 state 當作「內部」狀態,愉快的使用 v-model 綁定數據,map.vue 中也可以方便的拿到 state 做為參數請求,同時還可以直接在 map.vue 的模版中使用 &mdash;&mdash;state.message&mdash;&mdash;。

更進一步

上面的方案中,state「響應式化」是發生在子組件初始化的過程中,我希望能在應用開始的時候,主動在某個時刻完成這一步。這個時候就可以借助 Vue 構造函數,像下面這樣:

// store.js

import state from 'path/to/state.js'

new Vue({

  data: {

    state

  }

})

然后在主文件 main.js 中引入 store.js,state 就會被「響應式化」。

關于“vue狀態管理實例分析”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

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

vue
AI

修武县| 城固县| 黑山县| 西安市| 威远县| 壤塘县| 文成县| 双柏县| 左云县| 田东县| 塔城市| 南城县| 康定县| 清水县| 永年县| 长葛市| 湖北省| 易门县| 石阡县| 大英县| 饶平县| 富顺县| 丰顺县| 越西县| 张掖市| 满城县| 拜泉县| 绥芬河市| 二连浩特市| 收藏| 安化县| 寿阳县| 开鲁县| 泸州市| 松溪县| 巴马| 长泰县| 横山县| 抚顺市| 怀集县| 黔东|