整理和总结微信小程序的高频知识点

news2025/3/22 23:34:03

前言

近期萌生了一些想法,感觉可以做一个小程序作为产出。

但小程序做得比较少,因此边做边复习。整理和总结了一些高频知识点和大家一起分享。

一、模板和组件

1.1模板(Template)

优势
  • 简单灵活:模板定义和使用都较为简单,只需在 WXML 文件里定义好模板结构,然后在需要的地方引入并传入数据就行。不涉及复杂的生命周期管理和样式隔离等问题,使用起来更灵活。
  • 轻量级复用:适合简单的代码片段复用,能快速实现页面中重复部分的展示,不会引入过多额外代码和复杂度。
  • 数据传递直观:模板的数据传递通过属性绑定实现,数据流向清晰,易于理解和维护。
适用场景
  • 简单重复结构:当页面中有多处相似的简单结构,像商品列表中的单个商品展示、评论列表中的单条评论等,使用模板能快速复用这些结构。
  • 快速原型开发:在项目前期快速搭建页面原型时,模板可帮助开发者迅速复用代码,加快开发进度。

1.2组件(Component)

优势
  • 高度封装:组件将结构、样式和逻辑封装在一起,具有良好的独立性和复用性。可以在不同页面甚至不同项目中复用,减少代码冗余。
  • 生命周期管理:组件拥有自己的生命周期函数,如 createdattachedready 等,能方便地在不同阶段执行特定操作,比如数据初始化、事件绑定等。
  • 样式隔离:组件的样式默认是隔离的,不会影响到其他组件或页面,避免了样式冲突问题,提高了代码的可维护性。
  • 事件系统完善:组件有自己独立的事件系统,可自定义事件并在组件内外进行传递和处理,方便实现复杂的交互逻辑。
适用场景
  • 复杂交互模块:对于具有复杂交互逻辑和功能的模块,如弹窗、轮播图、下拉刷新等,使用组件可以更好地管理代码和状态。
  • 团队协作开发:在多人协作开发项目中,组件可以将不同功能模块进行拆分,每个开发者负责不同的组件开发,提高开发效率和代码质量。
  • 可维护性要求高的项目:当项目规模较大、需要长期维护时,使用组件可以使代码结构更加清晰,便于后续的修改和扩展。

1.3区别总结

  • 封装程度:模板只是简单的代码片段复用,封装程度较低;组件则是高度封装的代码单元,包含结构、样式和逻辑。
  • 数据和样式隔离:模板没有数据和样式隔离,使用时可能会受外部环境影响;组件默认有样式隔离,数据和逻辑也相对独立。
  • 复杂度:模板使用简单,适合简单场景;组件相对复杂,需要处理生命周期、事件等,但能应对复杂需求。

 1.4示例代码

模板使用

定义模板

<!-- template.wxml -->
<template name="itemTemplate">
  <view>
    <text>{{itemName}}</text>
    <text>{{itemPrice}}</text>
  </view>
</template>

使用模板

<!-- index.wxml -->
<import src="template.wxml" />
<template is="itemTemplate" data="{{itemName: '苹果', itemPrice: 5.0}}" />
组件使用

定义组件

// item-component.js
Component({
  properties: {
    itemName: String,
    itemPrice: Number
  },
  data: {
    // 组件内部数据
  },
  methods: {
    // 组件方法
  }
})
<!-- item-component.wxml -->
<view>
  <text>{{itemName}}</text>
  <text>{{itemPrice}}</text>
</view>
/* item-component.wxss */
view {
  border: 1px solid #ccc;
}

使用组件

<!-- index.wxml -->
<item-component itemName="苹果" itemPrice="5.0" />

比如我这里定义了一个contentScroll组件 

在index.html中使用该组件之前,需要在index.json中引用该组件

 

二、路由与导航

2.1路由

一个地图导航系统,知道每个页面的位置以及如何到达。在小程序中,路由负责管理页面之间的关系以及页面的加载/卸载等操作。页面都有路由路径,通过路径可以找到页面。 

注意:页面栈最多只能有十层!!!

2.2导航

用户在小程序中进行页面切换的操作过程和方式 

导航方式
  • wx.navigateTo
    用于打开一个新的页面,并将当前页面入栈。比如,你在一个商品列表页面,点击某个商品进入详情页,就可以使用 wx.navigateTo。它会把商品列表页留在页面栈中,当你在详情页点击返回按钮时,就能回到商品列表页。
  • wx.redirectTo
    这种方式会关闭当前页面,然后打开一个新的页面。例如,当用户完成一个订单支付流程后,从支付结果页面跳转到订单详情页面,使用 wx.redirectTo 可以避免用户通过返回按钮回到支付结果页面,保证页面流程的合理性。
  • wx.switchTab
    用于切换到 tabBar 页面
    wx.switchTab 只能用于跳转到在 app.json 文件中配置好的 tabBar 页面,否则会报错。开发中要注意不要将其用于跳转到非 tabBar 页面的场景。
    • 页面重新加载
      每次使用 wx.switchTab 切换到一个 tabBar 页面时,该页面的 onLoad 函数会被重新调用。如果页面有一些初始化操作在 onLoad 中,可能会导致一些不必要的重复加载。可以将一些不依赖于页面切换的初始化操作放在 onShow 函数中,以避免重复执行。
  • wx.navigateBack
    用于返回上一个页面。可以指定返回的页面层数,如果不指定,默认返回上一级页面。
    • 自定义返回层数
      `wx.navigateBack({
      delta: this.data.backDelta,
      success() {
      console.log('成功返回指定层数');
      },
      fail(err) {
      console.error('返回失败:', err);
      }
      });`

三、性能优化

3.1包体积优化

分包加载

配置app.json

在 app.json 中添加 subPackages 字段来配置分包信息。

页面跳转:

在代码中使用 wx.navigateTo 或其他导航方式跳转到分包页面时,小程序会自动下载对应的分包。

图片压缩

<image src="/images/placeholder.png" mode="aspectFit" bindload="onImageLoad">
onImageLoad() { // 图片加载完成后,替换为真实图片 this.setData({ imageUrl: this.data.realImageUrl }); }

代码分包

简单理解就是分包目录中有定义,然后在需要使用改组件的页面进行引入使用,
这里涉及“配置”“引用”

//配置
app.json中subPackages的components的设置


//引用组件页面的json
"usingComponents": { "custom-component": "/subPackages/componentPackage/components/customComponent/customComponent" }

//使用
<custom-component text="这是从页面传递的文本"></custom-component>

3.2渲染优化

  • 减少wx:for嵌套
  • 使用virtual-list优化长列表

3.3内存管理

及时销毁定时器、取消未完成的请求

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2319835.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue中js简单创建一个事件中心/中间件/eventBus

vue中js简单创建一个事件中心/中间件/eventBus 目录结构如下&#xff1a; eventBus.js class eventBus {constructor() {this.events {};}// 监听事件on(event, callback) {if (!this.events[event]) {this.events[event] [];}this.events[event].push(callback);}// 发射…

# [RPA] 使用八爪鱼进行高效网页数据采集

在许多行业中&#xff0c;数据是核心资产。然而&#xff0c;虽然许多网站的文本内容可以免费访问&#xff0c;但手动一条一条采集&#xff0c;不仅耗时耗力&#xff0c;还容易出错。这种情况下&#xff0c;使用自动化工具来提高采集效率就显得尤为重要。本文将介绍 八爪鱼 这一…

K8S学习之基础三十七:prometheus监控node资源

Prometheus v2.2.1 ​ 编写yaml文件&#xff0c;包含创建ns、configmap、deployment、service # 创建monitoring空间 vi prometheus-ns.yaml apiVersion: v1 kind: Namespace metadata:name: monitor-sa# 创建SA并绑定权限 kubectl create serviceaccount monitor -n monito…

#mapreduce打包#maven:could not resolve dependencies for project

打包报错&#xff1a; #报错信息&#xff1a; [ERROR] Failed to execute goal on project mapreduce_teacher1: Could not resolve dependencies for project org.example:mapreduce_teacher1:jar:1.0-SNAPSHOT: Failed to collect dependencies at org.apache.hive:hive-exe…

QT软件匠心开发,塑造卓越设计服务

在当今这个数字化飞速发展的时代&#xff0c;软件已经成为我们生活中不可或缺的一部分。而QT&#xff0c;作为一款跨平台的C图形用户界面应用程序开发框架&#xff0c;凭借其强大的功能和灵活性&#xff0c;在众多软件开发工具中脱颖而出。我们深知&#xff0c;在软件开发领域&…

田间机器人幼苗视觉检测与护苗施肥装置研究(大纲)

田间机器人幼苗视觉检测与护苗施肥装置研究 基于多光谱视觉与精准施肥的农业机器人系统设计 第一章 绪论 1.1 研究背景与意义 农业智能化需求&#xff1a; 传统幼苗检测依赖人工&#xff0c;效率低且易遗漏弱苗/病苗施肥不精准导致资源浪费和环境污染 技术挑战&#xff1a;…

生物化学笔记:医学免疫学原理 免疫系统的组成与功能+克隆选择学说

免疫系统的组成与功能 克隆选择学说 克隆选择学说&#xff08;Clonal Selection Theory&#xff09;是免疫学的核心理论之一&#xff0c;由 麦克法兰伯内特&#xff08;Frank Macfarlane Burnet&#xff09; 在 1957 年提出&#xff0c;用于解释特异性免疫反应的机制。 基本概…

Android 15 获取网络切片信息的标准接口

相关术语 简称全称中文说明URSPUE Route Selection Policy用户路由选择策略URSP 是 5G 核心网(PCF)下发给 UE 的策略,用于指导应用流量如何路由到不同的网络切片或 PDU 会话。其包含多个规则,每条规则由 优先级、业务描述符(Traffic Descriptor) 和 路由选择描述符(Rout…

使用【docker】+【shell】脚本半自动化部署微服务项目

一.前言 以下是一个基于 ‌Docker Shell脚本‌ 的半自动化部署方案&#xff0c;包含镜像构建、容器管理、网络配置和日志监控等核心功能&#xff0c;适用于大多数Web应用或微服务项目。 二‌.目录结构 三.脚本代码实现 1.‌Shell脚本实现 (deploy.sh) #!/bin/bash# 设置颜…

使用 GitHub 可重用工作流和 GitHub Actions 简化 DevOps

在当今的 DevOps 环境中&#xff0c;自动化是开发团队能够更快地交付功能并维护高质量代码库的关键。这就是像 GitHub Actions 这样的工具变得不可或缺的地方&#xff0c;因为它能够直接在存储库中自动化、自定义和执行 GitHub 工作流程。 当然&#xff0c;随着项目的规模和存…

Sql Server 索引性能优化 分析以及分表

定位需优化语句 根据工具 skywking 或者开启慢查询日志 找到 慢sql 的语句根据 执行过程 来 判断 慢的原因 row filter 指标 看查了多少数据 比例多少 type 看下是单表 还是 join联表 比如 执行步骤多 没索引 优化方向 减少执行次数索引 没索引考虑加索引 加索引 尽量选择 i…

vue使用element-ui自定义样式思路分享【实操】

前言 在使用第三方组件时&#xff0c;有时候组件提供的默认样式不满足我们的实际需求&#xff0c;需要对默认样式进行调整&#xff0c;这就需要用到样式穿透。本篇文章以vue3使用element-ui的Tabs组件&#xff0c;对Tabs组件的添加按钮样式进行客制化为例。 确定需要修改的组…

PowerBI 条形图,解决数据标签在条形内部看不清的问题

比如下面的条形图&#xff1a; 最上面两行&#xff0c;数据标签显示在了条形内部&#xff0c;哪怕设置了值为黑色 字体也会自动切换为白色&#xff0c;如果设计要求条形的颜色是浅色&#xff0c;就会导致数据看不清晰。 解决方法一&#xff1a; 将数据标签位置设置为端外 效果…

下载与快速上手 NVM:Node.js 版本管理工具

一、准备工作&#xff1a;卸载旧版 Node.js 重要提示&#xff1a;在安装 NVM 前&#xff0c;请先彻底删除已安装的 Node.js&#xff0c;避免路径冲突&#xff1a; 检查安装路径 bash where node常见路径&#xff1a; C:\Program Files\nodejs\C:\Users\用户名\AppData\Local\n…

网络防火墙(Firewall)、Web防火墙(WAF)、入侵检测系统(IDS)、入侵防御系统(IPS)对比总结

目录 一、Firewall、WAF、IDS、IPS四种设备简介 二、Firewall、WAF、IDS、IPS四种设备的角色定位 三、防火墙&#xff08;Firewall&#xff09;与入侵检测系统&#xff08;IPS&#xff09;的区别 四、入侵检测系统&#xff08;IDS&#xff09;与入侵防御系统&#xff08;IP…

Unity | 游戏数据配置

目录 一、ScriptableObject 1.创建ScriptableObject 2.创建asset资源 3.asset资源的读取与保存 二、Excel转JSON 1.Excel格式 2.导表工具 (1)处理A格式Excel (2)处理B格式Excel 三、解析Json文件 1.读取test.json文件 四、相关插件 在游戏开发中,策划…

IT工具 | node.js 进程管理工具 PM2 大升级!支持 Bun.js

P(rocess)M(anager)2 是一个 node.js 下的进程管理器&#xff0c;内置负载均衡&#xff0c;支持应用自动重启&#xff0c;常用于生产环境运行 node.js 应用&#xff0c;非常好用&#x1f44d; &#x1f33c;概述 2025-03-15日&#xff0c;PM2发布最新版本v6.0.5&#xff0c;这…

VulnHub-Web-Machine-N7通关攻略

一、信息收集 第一步&#xff1a;确定靶机IP为192.168.0.107 第二步&#xff1a;扫描后台及开放端口 第三步&#xff1a;进行敏感目录及文件扫描 http://192.168.0.107/index.html (CODE:200|SIZE:1620) http://192.168.0.107/server-status (CODE:403|SIZ…

论华为 Pura X 折叠屏性能检测

在科技浪潮中&#xff0c;折叠屏手机以其创新形态掀起市场热潮。华为 Pura X 作为华为最新折叠手机&#xff0c;承载前沿科技与精湛工艺&#xff0c;成为行业焦点。它融合先进折叠屏技术与优质材质&#xff0c;致力于打破传统手机使用边界&#xff0c;为用户开启全新体验。但产…

生成PDF文件:从html2canvas和jsPdf渲染到Puppeteer矢量图

刚刚实现而已&#xff1a;第一次明白&#xff0c;双击或file:///打开html文件&#xff0c;居然和从localhost:3000打开同一个html文件有本质的区别。 字体居然还能以Base64代码嵌入到网页&#xff0c;只是太大太笨。 需要安装node.js&#xff0c;npm安装更多依赖&#xff1a;…