ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

自定义组件⑨- behaviors代码共享-微信小程序开发(二十六)

2022-08-13 15:31:26  阅读:248  来源: 互联网

标签:behaviors 同名 自定义 程序开发 引用 behavior 组件 方法 属性


1. 什么是 behaviors

behaviors 是小程序中,用于实现组件间代码共享的特性,类似于 Vue.js 中的 “mixins”。

2. behaviors 的工作方式

每个 behavior 可以包含一组属性、数据、生命周期函数和方法。组件引用它时,它的属性、数据和方法会被合并到组件中。
每个组件可以引用多个 behavior,behavior 也可以引用其它 behavior。

3. 创建 behavior

调用 Behavior(Object object) 方法即可创建一个共享的 behavior 实例对象,供所有的组件使用:
在项目根目录下新建文件夹 behavior ,并在文件夹下新建 my-behavior.js 文件,该文件里面写behavior 的相关代码。

//调用Behavior() 方法,创建实例对象
//并使用 module.exports 将 behavior 实例对象共享出去
module.exports = Behavior({
  //属性节点
  properties:{},
  //私有数据节点
  data:{},
  //事件处理函数和自定义方法节点
  methods:{},
  //其它节点
})

4. 导入并使用 behavior

在组件中的 .js文件中,使用 require() 方法导入需要的 behavior,挂载后即可访问 behavior 中的数据或方法,示例代码如下:

/1.使用require() 导入需要的自定义 behavior 模块
const myBehavior = require("../../behavior/my-behavior")
Component({
  //2.将导入的behavior 实例对象,挂载到 behaviors 数组节点中,即可生效
  behaviors:[myBehavior],
  //组件的其它节点
})

5. behavior 中所有可用的节点

6. 同名字段的覆盖和组合规则*

组件和它引用的 behavior 中可以包含同名的字段,此时可以参考如下 3 种同名时的处理规则:
① 同名的数据字段 (data)
② 同名的属性 (properties) 或方法 (methods)
③ 同名的生命周期函数

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

1.如果有同名的属性 (properties) 或方法 (methods):

1)若组件本身有这个属性或方法,则组件的属性或方法会覆盖 behavior 中的同名属性或方法;
2)若组件本身无这个属性或方法,则在组件的 behaviors 字段中定义靠后的 behavior 的属性或方法会覆盖靠前的同名属性或方法;
3)在 2 的基础上,若存在嵌套引用 behavior 的情况,则规则为:引用者 behavior 覆盖 被引用的 behavior 中的同名属性或方法。

2.如果有同名的数据字段 (data):

1))若同名的数据字段都是对象类型,会进行对象合并;
2)其余情况会进行数据覆盖,覆盖规则为: 引用者 behavior > 被引用的 behavior 、 靠后的 behavior > 靠前的 behavior。(优先级高的覆盖优先级低的,最大的为优先级最高)

3.生命周期函数和 observers 不会相互覆盖,而是在对应触发时机被逐个调用:

1)对于不同的生命周期函数之间,遵循组件生命周期函数的执行顺序;
2对于同种生命周期函数和同字段 observers ,遵循如下规则:
   2.1)behavior 优先于组件执行;
  2.2)被引用的 behavior 优先于 引用者 behavior 执行;
  2.3)靠前的 behavior 优先于 靠后的 behavior 执行;
3)如果同一个 behavior 被一个组件多次引用,它定义的生命周期函数和 observers 不会重复执行。

标签:behaviors,同名,自定义,程序开发,引用,behavior,组件,方法,属性
来源: https://www.cnblogs.com/qingheshiguang/p/16583108.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有