知識
不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價值,我們在追求其視覺表現(xiàn)的同時,更側(cè)重于功能的便捷,營銷的便利,運營的高效,讓網(wǎng)站成為營銷工具,讓軟件能切實提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序為后期升級提供便捷的支持!
您當前位置>首頁 » 新聞資訊 » 小程序相關(guān) >
微信小程序--數(shù)據(jù)共享與方法共享
發(fā)表時間:2022-7-26
發(fā)布人:葵宇科技
瀏覽次數(shù):76
目錄
- 小程序?qū)?npm 的支持與限制
- npm 依賴包的安裝與使用
- 組件方法共享 behaviors
- 2. behaviors 的工作方式
- 4. 導入并使用 behavior
- 5. behavior 中所有可用的節(jié)點
- 6. 同名字段的覆蓋和組合規(guī)則
全局數(shù)據(jù)共享 Mobox
原生小程序開發(fā)中我們可以通過 mobx-miniprogram 配合 mobx-miniprogram-bindings 實現(xiàn)全局數(shù)據(jù)共享。二者為外部依賴,我們需要npm或yarn去安裝構(gòu)建相關(guān)依賴,才能正常使用.
npm安裝及其注意事項
小程序?qū)?npm 的支持與限制
在小程序中已經(jīng)支持使用 npm 安裝第三方包,從而來提高小程序的開發(fā)效率。
- 但是小程序中使用npm 包有如下5個限制:
- 只支持純 js 包,不支持自定義組件,不支持依賴于 Node.js 內(nèi)置庫的包
- 必須有入口文件,即需要保證 package.json 中的 main 字段是指向一個正確的入口,如果 package.json 中沒有 main 字段,則以 npm 包根目錄下的 index.js 作為入口文件。
- 測試、構(gòu)建相關(guān)的依賴請放入 devDependencies 字段中避免被一起打包到小程序包中,這一點和小程序 npm 包的要求相同。
- 不支持依賴 c++ 插件的包
- 小程序環(huán)境比較特殊,一些全局變量(如 window 對象)和構(gòu)造器(如 Function 構(gòu)造器)是無法使用的。
npm 依賴包的安裝與使用
初始化小程序生成package.json
npm init -y
安裝 npm 包
在小程序 package.json 所在的目錄中執(zhí)行命令安裝 npm 包:
npm install pageName
此處要求參與構(gòu)建 npm 的 package.json 需要在 project.config.js 定義的 miniprogramRoot 之內(nèi)。
構(gòu)建 npm
點擊開發(fā)者工具中的菜單欄:工具 --> 構(gòu)建 npm
勾選“使用 npm 模塊”選項:
構(gòu)建完成后即可使用 npm 包。
js 中引入 npm 包:
const myPackage = require('packageName') const packageOther = require('packageName/other')
使用 npm 包中的自定義組件:
{ "usingComponents": { "myPackage": "packageName", "package-other": "packageName/other" } }
Mobox
1. 全局數(shù)據(jù)共享
- 共享數(shù)據(jù)是指多個進程都可以訪問的數(shù)據(jù),而全局變量是一個進程內(nèi)的多個單元可共享的數(shù)據(jù)。
- 解決組件之間數(shù)據(jù)共享的問題。
- 開發(fā)中常用的全局數(shù)據(jù)共享方案有:Vuex、Redux、MobX、hooks等。
2. 小程序中的全局數(shù)據(jù)共享方案
- mobx-miniprogram: 用來創(chuàng)建 Store 實例對象
- mobx-miniprogram-bindings: 用來把 Store 中的共享數(shù)據(jù)或方法,綁定到組件或頁面中使用
3. 使用mobx
安裝 MobX 相關(guān)的包
在項目中運行如下的命令,安裝 MobX 相關(guān)的包:
npm i -S mobx-miniprogram mobx-miniprogram-bindings
注意:MobX 相關(guān)的包安裝完畢之后,記得刪除 miniprogram_npm 目錄后,重新構(gòu)建 npm。
2. 創(chuàng)建 MobX 的 Store 實例
```
import {observable ,action} from 'mobx-miniprogram'
export const store=observable({
<!-- 1、數(shù)據(jù)部分 -->
num1:1,
num2:2,
<!-- 2、計算屬性 -->
get sum(){
return this.num1+this.num2
},
<!-- 3、actions方法,用來修改store中的數(shù)據(jù) -->
updateNum1:action(function(step){
this.num1+=tep
})
})
```
將 Store 中的成員綁定到頁面中
import { createStoreBindings } from 'mobx-miniprogram-bindings' import { store } from '../../store/store' Page({ data: { }, onLoad: function (options) { this.storeBindings = createStoreBindings(this, { store, fields: ['num1', 'num2', 'sum'], actions: ['updateNum1'] }) }, btnHandler1(e) { this.updateNum1(e.target.dataset.step) }, onUnload: function () { this.storeBindings.detroyStoreBindings() } })
將 Store 中的成員綁定到組件中
- 通過storeBindingsBehavior實現(xiàn)自動綁定
- store:指定要綁定的store
- fields:置頂綁定的數(shù)據(jù)字段
numA:()=>store.num1 numA:(store)=>store.num1 numA:'num1'
- actions:指定要綁定的方法
import { storeBindingsBehavior } from 'mobx-miniprogram-bindings' import { store } from '../../store/store' Component({ behaviors: [storeBindingsBehavior], storeBindings: { // 數(shù)據(jù)源 store, fields: { numA: 'num1', numB: 'num2', sum: 'sum' }, actions: { updateNum2: 'updateNum2' } }, })
組件方法共享 behaviors
1. 什么是 behaviors
behaviors 是小程序中,用于實現(xiàn)組件間代碼共享的特性,類似于 Vue.js 中的 “mixins”。
2. behaviors 的工作方式
每個 behavior 可以包含一組屬性、數(shù)據(jù)、生命周期函數(shù)和方法。組件引用它時,它的屬性、數(shù)據(jù)和方法會被
合并到組件中。
每個組件可以引用多個 behavior,behavior 也可以引用其它 behavior。
3. 創(chuàng)建 behavior
調(diào)用 Behavior(Object object) 方法即可創(chuàng)建一個共享的 behavior 實例對象,供所有的組件使用:
/*
調(diào)用Behavior()方法,創(chuàng)建對象實例
使用module.exports講behevior 實例對象共享出去
*/
module.exports = Behavior({
// 屬性節(jié)點
properties: {},
// 私有數(shù)據(jù)節(jié)點
data: {},
// 事件處理函數(shù)和自定義方法節(jié)點
methods: {}
})
4. 導入并使用 behavior
在組件中,使用 require() 方法導入需要的 behavior,掛載后即可訪問 behavior 中的數(shù)據(jù)或方法,示例代碼
// components/test5/test5.js
const myBehavior = require('../../behaviors/my-behavior')
Component({
behaviors: [myBehavior],
/**
* 組件的屬性列表
*/
properties: {
count: Number
},
})
5. behavior 中所有可用的節(jié)點
可用的節(jié)點 | 類型 | 是否必填 | 描述 |
---|---|---|---|
properties | Object Map | 否 | 同組件的屬性 |
data | Object | 否 | 同組件的數(shù)據(jù) |
methods | Object | 否 | 同自定義組件的方法 |
behaviors | String Array | 否 | 引入其它的 behavior |
created | Function | 否 | 生命周期函數(shù) |
attached | Function | 否 | 生命周期函數(shù) |
ready | Function | 否 | 生命周期函數(shù) |
moved | Function | 否 | 生命周期函數(shù) |
detached | Function | 否 | 生命周期函數(shù) |
6. 同名字段的覆蓋和組合規(guī)則
組件和它引用的 behavior 中可以包含同名的字段,此時可以參考如下 3 種同名時的處理規(guī)則:
① 同名的數(shù)據(jù)字段 (data)
② 同名的屬性 (properties) 或方法 (methods)
③ 同名的生命周期函數(shù)
如果有同名的數(shù)據(jù)字段 (data):
- 若同名的數(shù)據(jù)字段都是對象類型,會進行對象合并;
- 其余情況會進行數(shù)據(jù)覆蓋,覆蓋規(guī)則為:組件 > 父 behavior > 子 behavior 、 靠后的 behavior > 靠前的 behavior。(優(yōu)先級高的覆蓋優(yōu)先級低的,最大的為優(yōu)先級最高)
如果有同名的屬性 (properties) 或方法 (methods):
- 若組件本身有這個屬性或方法,則組件的屬性或方法會覆蓋 behavior 中的同名屬性或方法;
- 若組件本身無這個屬性或方法,則在組件的 behaviors 字段中定義靠后的 behavior 的屬性或方法會覆蓋靠前的同名屬性或方法;
- 在 2 的基礎(chǔ)上,若存在嵌套引用 behavior 的情況,則規(guī)則為:父 behavior 覆蓋 子 behavior 中的同名屬性或方法。
生命周期函數(shù)不會相互覆蓋,而是在對應(yīng)觸發(fā)時機被逐個調(diào)用:
- 對于不同的生命周期函數(shù)之間,遵循組件生命周期函數(shù)的執(zhí)行順序;
- 對于同種生命周期函數(shù),遵循如下規(guī)則:
- behavior 優(yōu)先于組件執(zhí)行;
- 子 behavior 優(yōu)先于 父 behavior 執(zhí)行;
- 靠前的 behavior 優(yōu)先于 靠后的 behavior 執(zhí)行;
- 如果同一個 behavior 被一個組件多次引用,它定義的生命周期函數(shù)只會被執(zhí)行一次。
相關(guān)案例查看更多
相關(guān)閱讀
- 網(wǎng)站建設(shè)專業(yè)品牌
- 微信小程序開發(fā)入門課程
- 開發(fā)微信小程序
- 模版消息
- 云南網(wǎng)站建設(shè)百度
- 小程序開發(fā)聯(lián)系方式
- 模版信息
- 云南省建設(shè)廳官方網(wǎng)站
- 小程序定制開發(fā)
- 小程序商城
- 云南網(wǎng)絡(luò)營銷顧問
- 昆明小程序公司
- 云南網(wǎng)站建設(shè)費用
- 云南花農(nóng)小程序
- 網(wǎng)站收錄
- 云南網(wǎng)站建設(shè)招商
- 云南小程序開發(fā)制作
- 小程序
- 云南網(wǎng)站建設(shè)電話
- 昆明網(wǎng)絡(luò)公司
- 小程序模板開發(fā)公司
- 怎么做網(wǎng)站
- 網(wǎng)站建設(shè)優(yōu)化
- painter
- 云南網(wǎng)站建設(shè)首頁
- 江蘇小程序開發(fā)
- 汽車報廢回收軟件
- 云南網(wǎng)站建設(shè)哪家公司好
- 昆明網(wǎng)站設(shè)計
- 網(wǎng)站開發(fā)哪家好