小程序的behaviors方法是一种代码复用的方式,可以将一些通用的逻辑和方法提取出来,然后再多个组件中复用,从而减少代码冗余,提高代码的可维护性
如果需要使用behaviors复用代码,需要使用Behavior()方法,每个behavior可以包含一组属性、数据、生命周期函数和方法。组件应用它时,它的属性、数据和方法会被合并到组件中,生命周期函数也会在对应时机被调用。
组件和它引用的behavior中可以包含相同的字段,对这些字段的处理方法如下:
- 如果有同名的属性或者方法,采用就近原则,组件会覆盖behavior中的同名属性或者方法
- 如果由同名的数据字段并且都是对象类型的,会进行对象合并,其余情况采用就近原则进行数据覆盖
- 生命周期函数和observers不会相互覆盖,会是在对应触发时机被逐个调用,也就是都会被执行
components/custom08/custom08.wxml
components/custom08/behavior.js
const behavior=Behavior({
/**
* 组件的属性列表
*/
properties: {
label:{
type:String,
value:'我已同意'
}
},
/**
* 组件的初始数据
*/
data: {
name:'tom',
obj:{
name:'tyke'
}
},
/**
* 组件的方法列表
*/
methods: {
updateNae(){
this.setData({
name:'jerry'
})
console.log('我是behavior内部的方法!!!')
}
},
lifetimes:{
attached(){
console.log('我是behavior内部的生命周期函数')
}
}
})
export default behavior
components/custom08/custom08.js
// components/custom08/custom08.js
import behavior from './behavior'
Component({
behaviors:[behavior],
//在以后开发中,使用behaviors进行代码复用的时候
//组件和behaviors可能存在相同的字段
//如果存在相同的properties,就近原则,使用组件内部的数据
properties: {
label:{
type:String,
value:'匿名提交'
}
},
// 如果存在相同的data
//如果是对象类型,属性不同会进行合并,相同则以组件内部为准
//如果不是对象类型,就近原则,展示的属性以组件内部为准
data:{
name:'组件中的name',
obj:{
age:100,
name:'组件中的obj name'
}
},
//如果存在相同的方法,就近原则,使用组件内部的方法
methods:{
updateName(){
console.log('我是组件内部的方法!!!')
}
},
//如果存在相同的生命周期函数,生命周期函数都会被触发
lifetimes:{
attached(){
console.log('我是组件内部调用的生命周期函数!!!')
}
}
})