微信小程序组件生命周期与接口请求方法详解

一、小程序组件生命周期

微信小程序组件的生命周期指的是组件在不同阶段自动触发的函数,开发者可以利用这些钩子函数在特定时机执行相应操作。小程序组件的生命周期主要分为两类:组件自身生命周期和组件所在页面的生命周期。

1. 组件自身生命周期

主要生命周期函数
生命周期函数触发时机说明
created组件实例刚被创建时此时不能调用setData,适合添加自定义属性字段
attached组件进入页面节点树时this.data已初始化,适合大多数初始化工作
ready组件视图层布局完成后可以获取节点信息
moved组件被移动到节点树另一位置时较少使用
detached组件从页面节点树移除时适合做清理工作
error组件方法抛出错误时错误处理
生命周期执行顺序
  1. 页面进入时:

    text

    子组件 ———————— created
    子组件 ———————— attached
    页面 ———————— onLoad
    子组件 ———————— pageLifetimes —————— show
    页面 ———————— onShow
    子组件 ———————— ready
    页面 ———————— onReady
  2. 页面跳转或退出时:

    text

    子组件 ———————— pageLifetimes —————— hide
    页面 ———————— onHide
  3. 页面回退时:

    text

    子组件 ———————— pageLifetimes —————— show
    页面 ———————— onShow
    ```:cite[5]
生命周期定义方式

推荐在lifetimes字段内声明生命周期函数(优先级最高):

javascript

Component({lifetimes: {created() {console.log('组件实例刚被创建');},attached() {console.log('组件进入页面节点树');// 适合在此处发起数据请求},detached() {console.log('组件从页面节点树移除');}}
});

2. 组件所在页面的生命周期

组件可以监听所在页面的状态变化,通过pageLifetimes定义:

生命周期函数触发时机说明
show页面被展示时如从后台切回前台
hide页面被隐藏时如切后台或跳转页面
resize页面尺寸变化时接收尺寸参数
routeDone页面路由完成时-

定义示例:

javascript

Component({pageLifetimes: {show() {console.log('页面展示');// 可以在此刷新数据},hide() {console.log('页面隐藏');},resize(size) {console.log('页面尺寸变化', size);}}
});

二、小程序接口请求方法设置

1. 基本请求配置

小程序网络请求使用wx.requestAPI,必须配置HTTPS域名248。

服务器域名配置步骤:
  1. 登录小程序管理后台

  2. 进入「开发」-「开发设置」-「服务器域名」

  3. 配置request合法域名

注意事项

  • 只支持HTTPS协议

  • 不能使用IP地址或localhost(开发时可临时关闭校验)

  • 域名必须经过ICP备案

  • 一个月内最多可修改5次4

基本请求示例

javascript

wx.request({url: 'https://example.com/api', // 必须为HTTPSmethod: 'GET', // 或POST、PUT等data: { // 请求参数key1: 'value1',key2: 'value2'},header: { // 请求头'content-type': 'application/json'},success(res) {console.log('请求成功', res.data);},fail(err) {console.error('请求失败', err);},complete() {console.log('请求完成');}
});

2. 开发环境跳过域名校验

在开发者工具中可临时开启:

  1. 点击右上角「详情」

  2. 勾选「不校验合法域名、web-view域名、TLS版本及HTTPS证书」

注意:仅限开发调试使用,正式环境必须配置合法域名48

3. 请求封装示例

建议对请求进行统一封装,便于管理和维护:

javascript

// utils/http.js
const request = (options) => {return new Promise((resolve, reject) => {wx.request({url: `https://yourdomain.com${options.url}`,method: options.method || 'GET',data: options.data || {},header: {'content-type': 'application/json','Authorization': wx.getStorageSync('token') || ''...options.header},success(res) {if (res.statusCode === 200) {resolve(res.data);} else {reject(res.data);}},fail(err) {reject(err);}});});
};// GET请求封装
const get = (url, data = {}, options = {}) => {return request({url,data,method: 'GET',...options});
};// POST请求封装
const post = (url, data = {}, options = {}) => {return request({url,data,method: 'POST',...options});
};export default {request,get,post
};

4. 组件中发起请求的最佳实践

在组件的attached或页面生命周期的show中发起请求:

javascript

Component({lifetimes: {attached() {this.loadData();}},pageLifetimes: {show() {// 页面显示时刷新数据this.loadData();}},methods: {async loadData() {try {const res = await get('/api/data');this.setData({ list: res.data });} catch (err) {console.error('加载数据失败', err);}}}
});

5. 注意事项

  1. 并发限制

    • wx.requestwx.uploadFilewx.downloadFile最大并发限制为10个

    • wx.connectSocket最大并发限制为5个2

  2. 后台运行

    • 小程序进入后台5秒内未完成的请求会被中断2

  3. 数据编码

    • 建议服务器返回UTF-8编码数据

    • 小程序会自动过滤BOM头2

  4. GET与POST区别

    • GET参数在URL中,有长度限制

    • POST参数在请求体中,适合大数据量传输8

三、综合应用示例

组件生命周期与请求结合示例

javascript

// components/my-component.js
Component({lifetimes: {created() {// 初始化非响应式数据this.timer = null;},attached() {// 组件挂载时加载数据this.fetchData();// 启动轮询this.timer = setInterval(() => {this.fetchData();}, 60000);},detached() {// 组件卸载时清除定时器clearInterval(this.timer);}},pageLifetimes: {show() {// 页面显示时立即刷新数据this.fetchData();},hide() {// 页面隐藏时暂停轮询clearInterval(this.timer);}},methods: {async fetchData() {wx.showLoading({ title: '加载中...' });try {const res = await post('/api/list', {page: this.data.currentPage});this.setData({ list: res.data.list,total: res.data.total});} catch (err) {wx.showToast({title: '加载失败',icon: 'error'});} finally {wx.hideLoading();}},onReachBottom() {// 上拉加载更多if (this.data.list.length < this.data.total) {this.setData({currentPage: this.data.currentPage + 1}, () => {this.fetchData();});}}}
});

四、常见问题解决方案

  1. 请求失败排查步骤

    • 检查域名是否配置正确

    • 确认域名已HTTPS且ICP备案

    • 开发环境可临时关闭域名校验

    • 检查网络连接是否正常

    • 查看服务器日志定位问题46

  2. 组件生命周期不触发

    • 确保使用Component构造器

    • 检查基础库版本是否支持

    • 确认组件在页面节点树中17

  3. 数据更新不及时

    • pageLifetimes.show中刷新数据

    • 使用事件总线或全局状态管理通知更新59

  4. 跨域问题

    • 小程序不存在浏览器跨域问题

    • 只需配置合法域名即可68

通过合理利用组件生命周期和网络请求API,可以构建出高效、可靠的小程序应用。建议在开发过程中遵循最佳实践,如封装请求方法、合理选择生命周期钩子等,以提高代码质量和维护性。

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在线游戏玩家与物品交互处理

玩家与物品接触后的判定if (hit ! null && hit.CompareTag("Item")){Debug.Log("捡东西");var worldItem hit.gameObject.GetComponent<WorldItem>();if (worldItem ! null){var inventory GetComponent<PlayerInventory>();if (inv…

深入解析Java Stream 构建:AbstractPipeline

Java Stream 宏观介绍见&#xff1a;深入解析 Java Stream 设计&#xff1a;从四幕剧看流水线设计与执行机制-CSDN博客 PipelineHelper PipelineHelper 是 Java Stream API 内部一个至关重要的辅助类。正如其名&#xff0c;它是一个“管道助手”。可以把它想象成一个执行上下文…

《林景媚与命运回响》

《林景媚与命运回响》——当数据库开始回响命运&#xff0c;现实是否还能被信任&#xff1f;《林景媚数据库宇宙》系列第九部第一章&#xff1a;命运的涟漪公元 2089 年&#xff0c;数据库神谕的运行已趋于稳定&#xff0c;PostgreSQL Quantum Engine&#xff08;PQE&#xff0…

图神经网络入门:从GNN开始01图卷积网络GCN节点分类 02图注意力网络GAT 03图自编码器GAE 04 门控图神经网络GGNN

目录 一.基础1-[图论、图算法、CNN] 二.基础2-[图卷积神经网络GCN] 三.torch-geometric.nn工具包安装&#xff08;包含各种算法和数据集&#xff09; 四.GCN任务[节点分类-Cora 数据集] 五.图注意力网络&#xff08;GAT&#xff09; 六.图自编码器&#xff08;GAE&#x…

001 Configuration结构体构造

目录DramSys 代码分析1 Configuration结构体构造1.1 from_path 函数详解1.2 构造过程总结这种设计的好处2 Simulator 例化过程2.1 instantiateInitiatorDramSys 代码分析 1 Configuration结构体构造 好的&#xff0c;我们来详细解释一下 DRAMSysConfiguration.cpp 文件中 fro…

以太坊十年:智能合约与去中心化的崛起

以太坊10周年&#xff0c;敬开发者&#xff0c;敬构建者&#xff0c;敬还在链上的我们 以太坊即将迎来十周年纪念,作为一名在这个生态中深耕了8到9年的见证者&#xff0c;我亲历了它从一纸白皮书的构想到成长为全球领先去中心化平台的全过程。这十年间&#xff0c;以太坊经历了…

kafka 3.9.1版本: kraft + sasl+ standlone 模式完整可行安装步骤

Kafka 3.9.1 Kraft 单机模式安装 安装 OpenJDK 11 CentOS/RHEL yum install -y java-11-openjdk-develUbuntu/Debian apt install -y openjdk-11-jdk下载安装包 wget https://mirrors.aliyun.com/apache/kafka/3.9.1/kafka_2.12-3.9.1.tgz tar -zxvf kafka_2.12-3.9.1.tgz -C /…

Gitee DevOps平台深度评测:本土化优势与功能特性全面解析

Gitee DevOps平台深度评测&#xff1a;本土化优势与功能特性全面解析 在数字化转型浪潮下&#xff0c;企业软件开发流程的自动化与协作效率成为核心竞争力。作为国内领先的代码托管与DevOps平台&#xff0c;Gitee&#xff08;码云&#xff09;凭借其本土化服务与全流程支持能力…

从零开始本地化部署Dify:开源大模型应用平台搭建全指南

在AI应用开发的浪潮中&#xff0c;Dify作为一款开源的大语言模型(LLM)应用开发平台&#xff0c;正逐渐成为开发者和企业的首选工具。它巧妙地融合了后端即服务&#xff08;BaaS&#xff09;和LLMOps的理念&#xff0c;让开发者能够快速搭建生产级的生成式AI应用。无论是构建智能…

Qt 多媒体开发:音频与视频处理

Qt 多媒体模块提供了一套完整的 API&#xff0c;用于开发音频和视频处理应用。从简单的媒体播放到复杂的音视频编辑&#xff0c;Qt 都提供了相应的工具和组件。本文将从基础到高级全面解析 Qt 多媒体开发。 一、Qt 多媒体模块概述 1. 主要组件 Qt 多媒体模块包含以下核心组件&a…

Mac 专业图像处理 Pixelmator Pro

原文地址&#xff1a;Pixelmator Pro Mac 专业图像处理 Pixelmator Pro&#xff0c;是一款非常强大、美观且易于使用的图像编辑器&#xff0c;专为 Mac 设计。 采用单窗口界面、基于机器学习的智能图像编辑、自动水平检测&#xff0c;智能快速选择及更好的修复工具等功能优点…

iptables和IPVS比较

iptables 和 IPVS (IP Virtual Server) 都是 Linux 系统上用于处理网络流量的强大工具&#xff0c;但它们的设计目标、工作原理和适用场景有显著区别&#xff1a; 核心区别&#xff1a;主要目的&#xff1a; iptables&#xff1a; 核心是一个包过滤防火墙和网络地址转换工具。它…

语音识别指标计算 WER

目录 CER&#xff08;Character Error Rate&#xff09; WER Word Error Rate&#xff08;词错误率&#xff09; &#x1f9ee; WER 计算方式 &#x1f4cc; 示例 ✅ 理解要点 CER&#xff08;Character Error Rate&#xff09; 语音识别中的 CER&#xff08;Character …

【前端基础篇】JavaScript之jQuery介绍

文章目录前言JQuery基本介绍和使用方法引入依赖jQuery语法jQuery选择器jQuery事件操作元素获取/设置元素内容获取/设置元素属性获取/返回css属性添加元素删除元素总结&#xff1a;常用的jQuery方法 - 详细解释与示例事件处理拓展 - 详细解释与示例其他拓展内容前言 在阅读过程…

Vue入门:vue项目的创建和基本概念

一、vue的基本简介1. 什么是vue?Vue (发音为 /vjuː/&#xff0c;类似 view) 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建&#xff0c;并提供了一套声明式的、组件化的编程模型&#xff0c;帮助你高效地开发用户界面。无论是简单还是…

2.oracle保姆级安装教程

一、Oracle数据库安装1.找到软件的位置 D:\学习软件\Oracle&#xff0c;并解压软件2.双击setup.exe3.选择 是4.去掉勾&#xff0c;下一步5.创建和配置数据库&#xff0c;下一步6.桌面类&#xff0c;下一步7.配置安装路径地址和密码8.点完成9.正在安装&#xff0c;稍等片刻10.有…

STM32 软件模拟 I2C 读写 MPU6050--实现加速度与陀螺仪数据采集

演示视频&#xff1a; https://www.bilibili.com/video/BV1iCQRYXEBb/?share_sourcecopy_web&vd_source0e4269581b0bc60d57a80c9a27c98905一、前言在嵌入式开发中&#xff0c;MPU6050 六轴传感器因其集成加速度计和陀螺仪且成本低廉&#xff0c;广泛应用于平衡小车、飞控、…

TFLOPs与TOPS的转换关系详解:如何衡量AI芯片的算力?

在评估AI芯片或计算硬件的性能时&#xff0c;我们经常会遇到TFLOPs和TOPS这两个关键指标。很多开发者对它们的区别和转换关系存在疑惑。本文将深入解析这两个指标的含义、应用场景及转换方法&#xff0c;并提供实际应用中的注意事项。 一、基本概念解析 1.1 TFLOPs&#xff08;…

C语言:第11天笔记

C语言&#xff1a;第11天笔记 内容提要函数函数的概述函数的分类函数的定义形参和实参函数的返回值函数的调用函数的声明函数 函数的概述 **函数&#xff1a;**实现一定功能的&#xff0c;独立的代码模块&#xff0c;对于函数的使用&#xff0c;一定是先定义&#xff0c;后使 ​…

java导出pdf(使用html)

引入maven <dependencies><!-- Thymeleaf --><dependency><groupId>org.thymeleaf</groupId><artifactId>thymeleaf</artifactId><version>3.1.1.RELEASE</version> <!-- 或与 Spring Boot 匹配的版本 --></de…