微信小程序組件復(fù)用機(jī)制behaviors示例詳解
簡介:
小程序的 behaviors方法是一種代碼復(fù)用的方式,可以將一些通用的邏輯和方法提取出來,然后在多個組件中復(fù)用,從而減少代碼冗余,提高代碼的可維護(hù)性。
使用 behaviors 復(fù)用代碼
如果需要復(fù)用代碼,可以通過 Behavior() 方法定義一個行為,每個行為可以包含屬性、數(shù)據(jù)、生命周期函數(shù)和方法。組件引用該行為時,其屬性、數(shù)據(jù)和方法會被合并到組件中,生命周期函數(shù)也會在相應(yīng)時機(jī)被調(diào)用。
組件引用它時,它的屬性、數(shù)據(jù)和方法會被合并到組件中,生命周期函數(shù)也會在對應(yīng)時機(jī)被調(diào)用。
具體示例:
一、定義 Behavior
將公共的屬性、數(shù)據(jù)、生命周期函數(shù)、方法等,抽取到單獨(dú)的文件夾 behavior.js中
聲明并暴露出去
const Behavior = Behavior({
// 屬性
properties: {
label: {
type: String,
value: '我已同意該協(xié)議'
}
},
// 數(shù)據(jù)
data: {
name: 'Tom',
obj: {
name: 'Tyke'
}
},
// 方法
methods: {
updateName() {
this.setData({
name: 'Jerry'
})
}
},
// 生命周期
lifetimes: {
attached() {
console.log('我是組件的生命周期函數(shù)')
}
}
});
module.exports = Behavior;二、創(chuàng)建組件:
在component/example/example.js中創(chuàng)建一個組件,引用注冊之前定義的Behavior
const behavior = require('../../behaviors/behavior.js');
Component({
behaviors: [behavior], // 引用行為
properties: {
customLabel: String // 自定義屬性
},
data: {
message: 'Hello Behavior!'
},
methods: {
onTap() {
this.updateName(); // 調(diào)用行為中的方法
console.log(this.data.name); // 輸出: Jerry
}
}
});注冊behavior后,當(dāng)前被注冊組件擁有 behavior中的所有屬性、數(shù)據(jù)、方法,也能觸發(fā)生命周期
三、組件模版
在component/example/example.wxml 文件中獲取數(shù)據(jù)并渲染
<view>
<text>{{ label }}: {{ name }}</text> <!-- 使用行為的屬性和數(shù)據(jù) -->
<text>{{ customLabel }}</text> <!-- 使用組件的自定義屬性 -->
<text>{{ message }}</text> <!-- 使用組件的數(shù)據(jù) -->
<button bindtap="onTap">更新姓名</button>
</view>存在了相同項(xiàng)的情況處理
如果在behavior和 當(dāng)前匿名組件中存儲了相同的項(xiàng),并且項(xiàng)中有相同的變量
此時遵循就近原則(在自定義組件內(nèi)部定義的會覆蓋 behavior.js文件中定義的)
具體情況如下:
- 存在相同的 properties
- 就近原則,使用組件內(nèi)部的數(shù)據(jù)
- 存在相同的方法
- 就近原則,使用組件內(nèi)部的數(shù)據(jù)
- 存在相同的 data
- 如果是對象類型,屬性會進(jìn)行合并
- 如果不是對象類型的數(shù)據(jù),就近原則,展示的以組件內(nèi)部為準(zhǔn)
- 存在相同的生命周期函數(shù)和observers
- 生命周期函數(shù)都會被觸發(fā)(不會相互覆蓋,會是在對應(yīng)觸發(fā)時機(jī)被逐個調(diào)用,也就是都會被執(zhí)行)
如果有同名的屬性或方法,采用"就近原則",組件會覆蓋behavior中的同名屬性或方法
如果有同名的數(shù)據(jù)字段且都是對象類型,會進(jìn)行對象合并,其余情況會采用“就近原則"進(jìn)行數(shù)據(jù)覆蓋
到此這篇關(guān)于微信小程序組件復(fù)用機(jī)制behaviors的文章就介紹到這了,更多相關(guān)微信小程序behaviors內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解webpack-dev-server使用http-proxy解決跨域問題
這篇文章主要介紹了詳解webpack-dev-server使用http-proxy解決跨域問題,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-01-01
該如何加載google-analytics(或其他第三方)的JS
很多網(wǎng)站為了獲取用戶訪問網(wǎng)站的統(tǒng)計信息,使用了google-analytics或其他分析網(wǎng)站(下面的討論中只提google-analytics,簡稱ga)。2010-05-05
JavaScript制作頁面倒計時器的實(shí)現(xiàn)
這篇文章主要為大家詳細(xì)介紹了JavaScript制作頁面倒計時器的實(shí)現(xiàn),具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-03-03
教你如何自定義百度分享插件以及bshare分享插件的分享按鈕
在項(xiàng)目中我們常用到百度分享插件或者bshare分享插件,雖然官方都有自定義按鈕的功能,但是畢竟還是只有少數(shù)幾種,我們?nèi)绾蝸碇谱饔凶约禾厣姆窒戆粹o呢?2014-06-06
JavaScript實(shí)現(xiàn)MD5加密的六種方式實(shí)例
這篇文章主要給大家介紹了關(guān)于JavaScript實(shí)現(xiàn)MD5加密的六種方式,在JS中可以實(shí)現(xiàn)MD5加密算法,可以使用第三方庫或者自己編寫代碼實(shí)現(xiàn),需要的朋友可以參考下2023-09-09
QT與javascript交互數(shù)據(jù)的實(shí)現(xiàn)
本文主要介紹了QT與javascript交互數(shù)據(jù)的實(shí)現(xiàn),主要包括數(shù)據(jù)從QT流向JS以及數(shù)據(jù)從JS流向QT的幾種方法,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05

