小程序組件的生命周期,以及在小程序中進行接口請求的方法設置

微信小程序組件生命周期與接口請求方法詳解

一、小程序組件生命周期

微信小程序組件的生命周期指的是組件在不同階段自動觸發的函數,開發者可以利用這些鉤子函數在特定時機執行相應操作。小程序組件的生命周期主要分為兩類:組件自身生命周期和組件所在頁面的生命周期。

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…