微信小程序-组件复用机制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中的同名属性或方法

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

相关推荐
java1234_小锋10 小时前
分享一套优质的微信小程序校园志愿者系统(SpringBoot后端+Vue3管理端)
微信小程序·小程序·校园志愿者
2501_9160088912 小时前
深入解析iOS机审4.3原理与混淆实战方法
android·java·开发语言·ios·小程序·uni-app·iphone
打破砂锅问到底00712 小时前
AI 驱动开发实战:10分钟从零构建「微信群相册」小程序
人工智能·微信·小程序·ai编程
CHU72903512 小时前
扭蛋机盲盒小程序前端功能设计解析:打造趣味与惊喜并存的消费体验
前端·小程序
QT.qtqtqtqtqt13 小时前
uni-app小程序前端开发笔记(更新中)
前端·笔记·小程序·uni-app
CHU72903514 小时前
直播商城APP前端功能全景解析:打造沉浸式互动购物新体验
java·前端·小程序
黑客老李1 天前
web渗透实战 | js.map文件泄露导致的通杀漏洞
安全·web安全·小程序·黑客入门·渗透测试实战
游戏开发爱好者81 天前
日常开发与测试的 App 测试方法、查看设备状态、实时日志、应用数据
android·ios·小程序·https·uni-app·iphone·webview
2501_915106321 天前
app 上架过程,安装包准备、证书与描述文件管理、安装测试、上传
android·ios·小程序·https·uni-app·iphone·webview
2501_915106321 天前
使用 Sniffmaster TCP 抓包和 Wireshark 网络分析
网络协议·tcp/ip·ios·小程序·uni-app·wireshark·iphone