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

資訊專欄INFORMATION COLUMN

微信小程序全局狀態(tài)管理,并提供Vuex的開發(fā)體驗(yàn)

fuyi501 / 2224人閱讀

摘要:概要微信小程序的開發(fā)體驗(yàn)類似和,但是卻沒有提供全局狀態(tài)管理的機(jī)制,所以狀態(tài)的共享只能通過屬性傳遞的方式來實(shí)現(xiàn)。安裝將放入微信小程序項(xiàng)目的文件夾中,例如。

1. 概要

微信小程序的開發(fā)體驗(yàn)類似vue和react,但是卻沒有提供全局狀態(tài)管理的機(jī)制,所以狀態(tài)的共享只能通過屬性傳遞的方式來實(shí)現(xiàn)。這種做法在小規(guī)模的應(yīng)用中尚可以滿足開發(fā)效率,但是在復(fù)雜的應(yīng)用中組件的嵌套層次很深,屬性傳遞的路徑過長。

于是我就想利用小程序Page中的data對象來構(gòu)建一個全局store,這個store滿足一下幾點(diǎn)需求:

store可以被當(dāng)前頁面中任意一個組件訪問,并且這種訪問時(shí)直接的而不是通過屬性傳遞。

全局store對于組件是相應(yīng)式的,也就是說store的變化可以使組件發(fā)生重繪。

頁面和組件都可以修改store的狀態(tài),并且這種修改不破壞原來的響應(yīng)式。

提供類似Vuex的開發(fā)體驗(yàn),減小學(xué)習(xí)成本。

先附上源碼 github地址

2. 使用

我們先跳過原理來看使用方法。

2.1 安裝

將Store.js放入微信小程序項(xiàng)目的文件夾中,例如/lib/Store.js。

2.2 創(chuàng)建Page對象

這里我們通過wxappStore.createPage來創(chuàng)建。對比一下Store.js和原來的創(chuàng)建方法的區(qū)別

// 原來的創(chuàng)建方法
Page({
  data: {
    message: ""
  },
  onLoad: function () {
    this.setData({
        message: "hello world"
    })
  }
})
// 增加全局狀態(tài)管理之后
import wxappStore from "../../lib/Store.js";

Page(wxappStore.createPage({
    // 第一個參數(shù)和原來傳入Page方法的option沒有區(qū)別。其中的data會作為全局共享對象來使用。
    data: {
        message: ""
    },
    onLoad: function () {
        // 通過dispatch方法,進(jìn)行一個異步操作。  
        this.store.dispatch({ 
            name: "testAction",
            payload: "hello world"
        });
        // 通過commit方法,修改全局狀態(tài)。
        this.store.commit({ 
            name: "testMutation",
            payload: "hello world"
        });
    }
}, 
// 第二個參數(shù)是一個對象,其中包含mutations和actions
{
    mutations: {
        testMutation: function({ setData, payload, data }) {
            setData({
                message: payload
            });
        }
    },
    actions: {
        testAction: function ({ commit, payload, data }) {
            setTimeout(() => {
                commit({
                    name: "testMutation",
                    payload: payload
                });
            });
        }
    }
}))

wxappStore.createPage方法有兩個參數(shù)。

第一個參數(shù)和原來傳入Page方法的option沒有區(qū)別。其中的data會作為全局共享對象來使用。

第二個參數(shù)是一個對象,其中包含mutationsactions

2.3 使用mutation

mutation和Vuex中的mutation類似,它通過同步的方式修改狀態(tài)。可以通過commit調(diào)用。

2.3.1 定義mutation

mutations在wxappStore.createPage的第二個參數(shù)中定義,它用于修改全局狀態(tài)。mutation通常同步的。mutation方法的參數(shù)是一個對象,包含三個屬性:

setData function: 用來修改全局狀態(tài),在微信小程序中直接修改狀態(tài)不會觸發(fā)頁面重匯。

payload object:修改的狀態(tài),可以是一個對象,也可以是String等基礎(chǔ)數(shù)據(jù)類型

data object:當(dāng)前狀態(tài)

mutations: {
    testMutation: function({ setData, payload, data }) {
        setData({
            message: payload
        });
    }
},
2.3.2 調(diào)用mutation

通過commit方法調(diào)用mutation,它的參數(shù)是一個對象,包含兩個屬性:

name String:mutation的名稱

payload Object:需要修改的狀態(tài),和Vuex的payload類似。

this.store.commit({ 
    name: "testMutation",
    payload: "hello world"
});
2.4 使用action

action和Vuex中action概念類似,通常包含異步操作,在異步操作完成后進(jìn)行commit操作。

2.4.1 定義action

action方法的參數(shù)是一個參數(shù),包含3個屬性:

commit function:執(zhí)行commit操作

payload Object:數(shù)據(jù)對象,和Vuex類型

data Object:當(dāng)前狀態(tài)

actions: {
    testAction: function ({ commit, payload, data }) {
        setTimeout(() => {
            commit({
                name: "testMutation",
                payload: payload
            });
        });
    }
}
2.4.2 調(diào)用action

通過dispatch方法調(diào)用action,它的參數(shù)是一個對象,包含兩個屬性:

name String:action的名稱

payload Object:需要修改的狀態(tài),和Vuex的payload類似。

this.store.dispatch({ 
    name: "testAction",
    payload: "hello world"
});
2.5 創(chuàng)建Component

在Component中我們需要完成兩項(xiàng)工作

第一將全局狀態(tài)綁定到當(dāng)前組件的data屬性上,并將組件的data屬性綁定到頁面元素上。

第二組件需要使用commit或者dispatch完成全局狀態(tài)的修改。

這里Store.j通過wxappStore.createComp來創(chuàng)建Component,它會通過代理的方式為Component實(shí)現(xiàn)全局狀態(tài)管理的功能。

import wxappStore from "../lib/Store.js";

Component(wxappStore.createComp({
  data: {
    localtimeData: ""
  },
  ready: function () {
    // 綁定全局狀態(tài)
    this.getGlobalData({ globalDataKey: "localtime", localDataKey: "localtimeData" });

    // 改變?nèi)譅顟B(tài)  
    this.store.commit({
        name: "testMutation",
        payload: (new Date()).toLocaleTimeString()
    })
  }
}))
讀取全局狀態(tài):{{localtimeData}}
2.5.1 全局狀態(tài)綁定

全局狀態(tài)綁定通過getGlobalData這個實(shí)例方法實(shí)現(xiàn),這個方法并不在小程序的運(yùn)行環(huán)境中,它是Store.js執(zhí)行的過程中插入到Component實(shí)例中的。

getGlobalData 不能再created回調(diào)中調(diào)用,應(yīng)為component的實(shí)例方法setData不能再created中調(diào)用。

getGlobalData的參數(shù)是一個對象,包含兩個屬性:

globalDataKey String:這個屬性表示需要全局狀態(tài)的屬性名,這個全局狀態(tài)將于component的本地狀態(tài)綁定。

localDataKey String:這個屬性表示本地狀態(tài)的屬性名,這個本地狀態(tài)將于全局狀態(tài)綁定。

// 綁定全局狀態(tài)
this.getGlobalData({ globalDataKey: "localtime", localDataKey: "localtimeData" });
2.5.2 改變?nèi)譅顟B(tài)

可以使用store.commit或者store.dispatchstore并不是小程序的運(yùn)行環(huán)境中內(nèi)置的,同樣是通過Store.js插入到每一個component實(shí)例中。它的使用方法和Page中的類似。

3. 這套框架的不足

Store.js借用了Page對象的data屬性來完成全局狀態(tài)管理,所以data屬性的職責(zé)并不單一。data屬性兼具了頁面ViewModel的功能和全局狀態(tài)的功能。但是Page中的data屬性本來也具有全局意義,所以兩者的沖突并不大。

component中的data屬性職責(zé)并不單一。它兼具了本地屬性的功能和綁定全局狀態(tài)的功能。而且直接通過setData修改component中的data并不能觸發(fā)全局狀態(tài)的改變,因?yàn)閐ata的作用域僅限于當(dāng)前component,必須通過store.commit或者store.dispatch觸發(fā)發(fā)全局狀態(tài)的改變。

如果你發(fā)現(xiàn)其他問題,歡迎留言,我們共同進(jìn)步!

4. 寫完好累,原理等下次更新吧。。。。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/94511.html

相關(guān)文章

  • 【開源】小程序And公眾號商城,外加后臺,功能齊全!

    摘要:前言一個集微信公眾號商城小程序商城商城后臺的一個開源項(xiàng)目,后臺是基于開發(fā)的,是一個簡潔而強(qiáng)大的開源微信公眾平臺開發(fā)框架,微信功能插件化開發(fā)多公眾號管理配置簡單。微信小程序項(xiàng)目下載整個包之后,進(jìn)行根目錄文件夾。 前言 一個集微信公眾號商城/小程序商城/商城后臺的一個開源項(xiàng)目,后臺是基于WeiPHP5.0開發(fā)的,WeiPHP是一個簡潔而強(qiáng)大的開源微信公眾平臺開發(fā)框架,微信功能插件化開發(fā),多...

    VishKozus 評論0 收藏0
  • 【開源】小程序And公眾號商城,外加后臺,功能齊全!

    摘要:前言一個集微信公眾號商城小程序商城商城后臺的一個開源項(xiàng)目,后臺是基于開發(fā)的,是一個簡潔而強(qiáng)大的開源微信公眾平臺開發(fā)框架,微信功能插件化開發(fā)多公眾號管理配置簡單。微信小程序項(xiàng)目下載整個包之后,進(jìn)行根目錄文件夾。 前言 一個集微信公眾號商城/小程序商城/商城后臺的一個開源項(xiàng)目,后臺是基于WeiPHP5.0開發(fā)的,WeiPHP是一個簡潔而強(qiáng)大的開源微信公眾平臺開發(fā)框架,微信功能插件化開發(fā),多...

    linkFly 評論0 收藏0
  • 詳解 mpvue 小程序框架 及和原生差異

    摘要:在這一步,實(shí)例已完成以下的配置數(shù)據(jù)觀測,屬性和方法的運(yùn)算,事件回調(diào)。可以直接寫等標(biāo)簽的寫法之前會的工程師上手框架的成本較低 簡介 1.美團(tuán)工程師推出的基于Vue.js封裝的用于開發(fā)小程序的框架2.融合了原生小程序和Vue.js的特點(diǎn)3.可完全組件化開發(fā) 特點(diǎn) 1.組件化開發(fā)2.完成的Vue.js開發(fā)體驗(yàn)(前提是熟悉Vue)3.可使用Vuex管理狀態(tài)4.Webpack構(gòu)建項(xiàng)目5.最終H5...

    IamDLY 評論0 收藏0
  • 也許你不需要第三方小程序框架

    摘要:所以在小程序出現(xiàn)之后,一股框架之風(fēng)也很快的出現(xiàn),微信小程序剛推出之后,就出現(xiàn)了兩個比較出名的小程序開發(fā)框架,。 原文地址:https://ant-move.github.io/we... 這里說的去除小程序框架其實(shí)并不嚴(yán)謹(jǐn),因?yàn)樾〕绦虮旧硪菜闶且粋€框架,而且是一個功能更加完善的框架系統(tǒng)。在前端的概念中,我們一般說一個框架是指一個用來幫助開發(fā)者構(gòu)建用戶界面的框架,而小程序框架本身不僅僅包...

    red_bricks 評論0 收藏0
  • 信小程序 + 騰訊地圖SDK 實(shí)現(xiàn)路線規(guī)劃

    摘要:業(yè)內(nèi)開發(fā)框架層出不窮,,,等等,都在朝著更快,更強(qiáng)大的方向發(fā)展,有統(tǒng)一微信支付寶百度和頭條小程序的大趨勢。最近升級為版本,支持微信支付寶百度和頭條小程序。 原文鏈接 最近小程序的發(fā)展越來越火了,作為各個產(chǎn)品線的extra服務(wù)入口,以輕便、快速、強(qiáng)大的社交鏈吸引著大量的用戶和開發(fā)者。業(yè)內(nèi)開發(fā)框架層出不窮,wepy,mpvue,taro等等,都在朝著更快,更強(qiáng)大的方向發(fā)展,有統(tǒng)一 H5、微...

    keithyau 評論0 收藏0

發(fā)表評論

0條評論

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