组件复用机制behaviors

小程序的behaviors方法是一种代码复用的方式,可以将一些通用的逻辑和方法提取出来,然后再多个组件中复用,从而减少代码冗余,提高代码的可维护性

如果需要使用behaviors复用代码,需要使用Behavior()方法,每个behavior可以包含一组属性、数据、生命周期函数和方法。组件应用它时,它的属性、数据和方法会被合并到组件中,生命周期函数也会在对应时机被调用。

组件和它引用的behavior中可以包含相同的字段,对这些字段的处理方法如下:

  1. 如果有同名的属性或者方法,采用就近原则,组件会覆盖behavior中的同名属性或者方法
  2. 如果由同名的数据字段并且都是对象类型的,会进行对象合并,其余情况采用就近原则进行数据覆盖
  3. 生命周期函数和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('我是组件内部调用的生命周期函数!!!')
    }
  }
})

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

塔塔o

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值