Vuet.js規則詳解,它是你不知道的強大功能?

weixin_33861800發表於2017-06-26

Vuet.js是什麼?

Vuet.js是給Vue.js提供狀態管理的一個工具,與vuex不同,它是一種崇尚規則定製的狀態管理模式。事先將狀態更新的規則寫好,然後將規則注入到元件中,然後狀態按照預訂的規則來進行更新。
github:Vuet.js

主動型和被動型規則

Vuet.js內建了lifemanualneedonceroute這幾種常見的規則,除了manual規則外,其他都是屬於主動型更新規則,在達到一定的條件上會自動觸發狀態更新。

life

描述: 每次都會在元件的beforeCreate鉤子中呼叫一次更新,元件銷燬時在destroyed鉤子,狀態會被重置,恢復到初始狀態
在一個父元件中,想和自己的子子元件進行通訊,但是又不希望父元件銷燬之後,原來的狀態還在,life規則就是專門針對這種場景的,在元件銷燬時,模組的狀態也會隨之恢復到初始狀態

manual

manual規則允許將各種更新模組狀態的方法集中起來管理,等待使用者來手動觸發對應的模組更新,比如記錄使用者點選一個按鈕的次數:


<!--index.html-->
<div id="app">
    {{ count }}
    <button @click="$count.plus">計數</button>
</div>
<script>
// main.js
import Vue from 'vue'
import Vuet, { mapModules, mapRules } from 'vuet'

const vuet = new Vuet({
    modules: {
        count: {
            data () {
                return 0
            },
            manuals: {
                plus ({ state }) {
                    // 允許同步、或者非同步的更新
                    this.setState(++state)
                }
            }
        }
    }
})

export default new Vue({
    el: '#app',
    vuet, // vuet例項注入到vue例項
    mixins: [
        mapModules({ count: 'count' }), // 元件連線模組
        mapRules({
            manual: 'count' // 使用manual規則向元件注入操作模組資料的更新方法
        })
    ]
})

</script>複製程式碼

通過上面的程式碼,就可以得知Vuet.js是天然的支援多元件進行通訊,總之它是簡單的,敏捷的。manual規則預設以$模組名稱將方法集合注入到元件中,使得程式碼在閱讀方面會更友好,更通俗易懂,同時程式碼也會更優雅。

need

描述: 每次都會在元件的beforeCreate鉤子中呼叫一次更新
比如有一個訊息的數量,我希望每次開啟訊息頁面的時候,訊息數量都能自動更新,這種場景使用need規則就再合適不過了

once

描述: 僅第一次在元件的beforeCreate鉤子中呼叫一次更新,之後在任何元件都不會再進行更新
比如你A、B、C三個頁面,都需要選擇省市區,而這些資料幾乎是不可變的,所以之後就沒有再必要進行更新了。once的規則就能幫你節省了不必要的請求,幫你優化程式

route

哈哈,這個篇幅有點大,等下次專門開篇文章進行講解。

總結

vuet允許你將有規律的狀態更新,封裝成一種規則,從而提升你的開發效率,比如說需要定時向伺服器更新訊息,這也是一種規則,下次有時間,我們可以專門寫這樣的一個規則。

相關文章