微信小程序-组件复用机制behaviors

简介:

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

使用 behaviors 复用代码

如果需要复用代码,可以通过 Behavior() 方法定义一个行为,每个行为可以包含属性、数据、生命周期函数和方法。组件引用该行为时,其属性、数据和方法会被合并到组件中,生命周期函数也会在相应时机被调用。

组件引用它时,它的属性、数据和方法会被合并到组件中,生命周期函数也会在对应时机被调用。


具体示例:

一、定义 Behavior

将公共的属性、数据、生命周期函数、方法等,抽取到单独的文件夹 behavior.js中

  • 声明并暴露出去
javascript 复制代码
const Behavior = Behavior({
    // 属性
    properties: {
        label: {
            type: String,
            value: '我已同意该协议'
        }
    },
    // 数据
    data: {
        name: 'Tom',
        obj: {
            name: 'Tyke'
        }
    },
    // 方法
    methods: {
        updateName() {
            this.setData({
                name: 'Jerry'
            })
        }
    },
    // 生命周期
    lifetimes: {
        attached() {
            console.log('我是组件的生命周期函数')
        }
    }
});
module.exports = Behavior;

二、创建组件:

  • 在component/example/example.js中创建一个组件,引用注册之前定义的Behavior
javascript 复制代码
const behavior = require('../../behaviors/behavior.js');

Component({
    behaviors: [behavior], // 引用行为
    properties: {
        customLabel: String // 自定义属性
    },
    data: {
        message: 'Hello Behavior!'
    },
    methods: {
        onTap() {
            this.updateName(); // 调用行为中的方法
            console.log(this.data.name); // 输出: Jerry
        }
    }
});

注册behavior后,当前被注册组件拥有 behavior中的所有属性、数据、方法,也能触发生命周期

三、组件模版

  • 在component/example/example.wxml 文件中获取数据并渲染
html 复制代码
<view>
    <text>{{ label }}: {{ name }}</text> <!-- 使用行为的属性和数据 -->
    <text>{{ customLabel }}</text> <!-- 使用组件的自定义属性 -->
    <text>{{ message }}</text> <!-- 使用组件的数据 -->
    <button bindtap="onTap">更新姓名</button>
</view>

存在了相同项的情况处理

如果在behavior和 当前匿名组件中存储了相同的项,并且项中有相同的变量

此时遵循就近原则(在自定义组件内部定义的会覆盖 behavior.js文件中定义的)

具体情况如下:

  • 存在相同的 properties
    • 就近原则,使用组件内部的数据
  • 存在相同的方法
    • 就近原则,使用组件内部的数据
  • 存在相同的 data
    • 如果是对象类型,属性会进行合并
    • 如果不是对象类型的数据,就近原则,展示的以组件内部为准
  • 存在相同的生命周期函数和observers
    • 生命周期函数都会被触发(不会相互覆盖,会是在对应触发时机被逐个调用,也就是都会被执行)

如果有同名的属性或方法,采用"就近原则",组件会覆盖behavior中的同名属性或方法

如果有同名的数据字段且都是对象类型,会进行对象合并,其余情况会采用"就近原则"进行数据覆盖

相关推荐
毕设源码-邱学长1 天前
【开题答辩全过程】以 小众商户小程序为例,包含答辩的问题和答案
小程序
sheji34161 天前
【开题答辩全过程】以 基于微信小程序的“XIN”学生组织管理系统为例,包含答辩的问题和答案
微信小程序·小程序
一匹电信狗1 天前
【Linux我做主】细说进程等待
linux·运维·服务器·c++·ubuntu·小程序·开源
2501_915909061 天前
uni-app iOS 上架常见问题与解决方案,实战经验全解析
android·ios·小程序·https·uni-app·iphone·webview
编程迪2 天前
货运系统源码 货运物流小程序 货运平台搭建 货运软件开发
小程序·货运系统·货运源码·货运物流软件·货运平台搭建
低代码布道师2 天前
少儿舞蹈小程序(6)打造您的“活”名片:动态展示机构实力
低代码·小程序
星河顾盼2 天前
【微信小程序预览文件】(PDF、DOC、DOCX、XLS、XLSX、PPT、PPTX)
微信小程序·pdf·powerpoint
小浣熊喜欢揍臭臭2 天前
uniapp+vue3 微信小程序全屏广告组件功能
微信小程序·uni-app
马拉萨的春天2 天前
小程序点击之数据绑定
小程序
Coodor2 天前
碰一下可打开小程序,在web系统中如何嵌入将小程序写入NFC
前端·小程序·nfc