[Vue]props解耦傳參

在 Vue 中,通過 props 傳遞路由參數(即 props 解耦)是一種將組件與路由參數解耦的推薦方式。這種方法能顯著提升組件的獨立性、復用性和可維護性。以下是詳細解釋:


一、什么是 props 解耦?

props 解耦是指:將路由參數通過組件的 props 傳遞,而非直接在組件內部訪問 $route.params$route.query
這是通過 Vue Router 的路由配置實現的:在路由定義中設置 props: true(或更復雜的邏輯),路由參數會自動映射為組件的 props

示例對比
  • 未解耦(直接依賴 $route

    export default {mounted() {const id = this.$route.params.id; // 直接依賴路由對象}
    }
    
  • 解耦(通過 props

    export default {props: ['id'], // 通過 props 接收參數mounted() {console.log(this.id); // 直接使用 props}
    }
    

二、使用 props 解耦的好處

1. 組件獨立性增強
  • 不依賴路由系統:組件無需知道參數來自路由,只需聲明需要的 props
  • 可復用性提高:同一組件可在不同上下文中使用(如通過父組件手動傳參,或通過路由自動傳參)。
2. 代碼更清晰
  • 接口明確:通過 props 聲明參數,組件的輸入一目了然。
  • 類型檢查支持:可結合 Vue 的 props 類型驗證,確保參數類型正確:
    props: {id: {type: Number,required: true}
    }
    
3. 測試更簡單
  • 無需模擬 $route:測試時可直接傳遞 props,無需復雜地模擬路由對象。
    // 測試用例
    const wrapper = mount(MyComponent, {propsData: { id: 123 } // 直接傳入 props
    });
    
4. 兼容動態路由和靜態傳參
  • 統一參數來源:無論參數來自路由還是父組件,組件內部邏輯一致。
  • 靈活切換:組件可輕松從路由傳參改為父組件傳參,無需修改內部代碼。

三、如何實現 props 解耦?

1. 路由配置中啟用 props
  • 布爾模式(自動映射 paramsprops):

    // router.js
    {path: '/user/:id',component: UserComponent,props: true // 將 params.id 映射為組件的 props.id
    }
    
  • 對象模式(靜態固定值):

    {path: '/user',component: UserComponent,props: { id: 123 } // 始終傳遞 id=123
    }
    
  • 函數模式(動態生成 props):

    {path: '/user/:id',component: UserComponent,props: (route) => ({id: Number(route.params.id), // 轉換類型query: route.query.search     // 傳遞 query 參數})
    }
    
2. 組件聲明 props

在組件中聲明接收的 props

// UserComponent.vue
export default {props: ['id'], // 接收路由參數 idtemplate: '<div>User ID: {{ id }}</div>'
}

四、適用場景

1. 路由參數傳遞
  • 動態路由(如 /user/:id)的參數自動映射為 props
  • 結合 query 參數時,可通過函數模式傳遞。
2. 組件復用
  • 同一組件既可通過路由跳轉使用,也可作為子組件被父組件直接調用。
3. 參數處理
  • 在路由層對參數進行預處理(如類型轉換、數據過濾)。

五、對比傳統方式($route.params

特性props 解耦直接訪問 $route
組件與路由的耦合度低(通過接口 props 交互)高(直接依賴 $route 對象)
可復用性高(不依賴路由上下文)低(只能在路由跳轉時使用)
測試復雜度低(直接傳 props高(需模擬 $route
參數處理靈活性高(可在路由配置中預處理)低(需在組件內部處理)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/79574.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/79574.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/79574.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Trae 使用心得:從新手到上手

Trae 使用心得&#xff1a;從新手到上手 最近&#xff0c;我開始試用 Trae&#xff0c;一款新興的 AI 開發工具。在使用過程中&#xff0c;我發現它與我之前用過的 Cursor 有些不同&#xff0c;也帶來了一些新的體驗。 初體驗&#xff1a;操作的便利性 一開始&#xff0c;我…

游戲引擎學習第256天:XBox 控制器卡頓和修復 GL Blit 伽瑪問題

回顧并為今天定下基調 今天的主要任務是讓我們的性能分析工具正常工作&#xff0c;因為昨天已經完成了結構性工作。現在&#xff0c;剩下的工作大部分應該是調試和美化。性能分析工具現在應該已經基本可用了。昨天我們在這個方面取得了很大的進展。 接下來&#xff0c;我們將…

PVD中斷檢測掉電

文章目錄 概述配置掉電擦寫注意 概述 STM32 PVD功能具體可以檢測到上電、掉電瞬間&#xff0c;其處理方式有中斷響應及事件響應。掉電設置為上升沿觸發&#xff0c;上電為下降沿觸發 配置 1.開啟PVD中斷并設置其優先級 2.配置響應中斷或事件的閾值電壓 3.配置響應模式 生成…

快速掌握--cursor

Cursor - The AI Code Editor 官網下載安裝 詳細教程&#xff1a;cursor 下載安裝使用&#xff08;保姆教程&#xff09;_cursor下載-CSDN博客 不知道為啥&#xff0c;第一次給我用的是繁體回答 然后改了一下詢問方式 codebase就是告訴ai可以從整個項目中找答案&#xff0…

1993年地級市民國鐵路開通數據(地級市工具變量)

1993年地級市民國鐵路開通數據&#xff08;地級市工具變量&#xff09; 1、時間&#xff1a;1933年 2、指標&#xff1a;是否開通鐵路 3、來源&#xff1a;《Z國鐵道便覽》 4、方法說明&#xff1a;參考田坤&#xff08;2023&#xff09;參考章元&#xff08;2008&#xff…

AI優化SEO關鍵詞實踐路徑

內容概要 隨著人工智能技術深度滲透數字營銷領域&#xff0c;SEO關鍵詞優化正經歷從人工經驗驅動向算法智能決策的躍遷。本文聚焦AI技術在SEO關鍵詞全生命周期管理中的應用框架&#xff0c;系統闡述智能算法如何通過海量數據挖掘潛在搜索需求、解析用戶意圖的語義關聯性&#…

論微服務架構及其應用

試題四 論微服務架構及其應用 微服務提倡將單一應用程序劃分成一組小的服務&#xff0c;服務之間互相協調、互相配合&#xff0c;為用戶提供最終價值。每個服務運行在其獨立的進程中&#xff0c;服務與服務間采用輕量級的通信機制互相溝通。在微服務架構中&#xff0c;每個服務…

基于SpringBoot+Vue實現的電影推薦平臺功能三

一、前言介紹&#xff1a; 1.1 項目摘要 2023年全球流媒體用戶突破15億&#xff0c;用戶面臨海量內容選擇困難&#xff0c;傳統推薦方式存在信息過載、推薦精準度低等問題。傳統推薦系統存在響應延遲高&#xff08;平均>2s&#xff09;。隨著互聯網的快速發展&#xff0c;…

ARM 算數指令

加法 ADD 減法 SUB 取負 NEG 比較 CMP 乘法 MUL 移位 LSL、LSR、ASL、ASR、ROL、ROR加法和減法 絕大多數微處理器都實現了帶進位的加法指令&#xff0c;能夠將兩個操作數和條件碼寄存器中的進位位加到一起。這條指令會使字長大于計算機固有字長的鏈接運算更加方便。 說明了如何…

JAVA---集合ArrayList

集合 1. 自動擴容 &#xff0c;集合長度可變 2. 只可以存引用數據類型&#xff0c;如果要存基本數據類型&#xff0c;需要將其轉換成對應的包裝類 ArrayList 定義在 java.util 下的&#xff0c;實現了 List 接口。ArrayList 內部以動態數組的形式存儲元素&#xff0c;這意…

Scrapy框架之【settings.py文件】詳解

settings.py 文件的主要作用是對 Scrapy 項目的全局設置進行集中管理。借助修改這個文件中的配置項&#xff0c;你可以對爬蟲的行為、性能、數據處理等方面進行靈活調整&#xff0c;而無需修改爬蟲代碼。 ①默認英文注釋settings.py # Scrapy settings for douban project # …

Java變量學習筆記

Java變量 -為什么需要變量&#xff1f; 一個程序就是一個世界 變量是程序的基本組成單位 不論是使用哪種高級程序語言編寫程序,變量都是其程序的基本組成單位&#xff0c;比如: //變量有三個基本要素(類型名稱值) class Test{public static void main(String [largs){int a1;…

數據結構*隊列

隊列 什么是隊列 是一種線性的數據結構&#xff0c;和棧不同&#xff0c;隊列遵循“先進先出”的原則。如下圖所示&#xff1a; 在集合框架中我們可以看到LinkedList類繼承了Queue類&#xff08;隊列&#xff09;。 普通隊列&#xff08;Queue&#xff09; Queue中的方法 …

Nginx — 防盜鏈配置

防盜鏈簡述 防盜鏈是一種保護網絡資源所有者權益的技術手段&#xff0c;旨在防止未經授權的用戶或網站通過直接鏈接的方式盜用資源&#xff0c;以下是關于防盜鏈的簡述&#xff1a; 原理 基于請求頭驗證&#xff1a;服務器通過檢查請求頭中的特定字段&#xff0c;如Referer字…

【淺學】Windows下ffmpeg+nginx+flv將本地視頻推流在本地搭建的Web前端頁面中播放,超詳細步驟

Nginx安裝和配置 下載nginx-1.19.3-http-flv 模塊預編譯包并解壓放在d盤&#xff0c;路徑就跟安裝步驟里說的一樣(如下圖)&#xff0c;不然會有其他問題出現。 打開conf/nginx.conf&#xff0c;查看RTMP和http相關的配置&#xff0c;確認端口號和路由名稱 ffpemg推流視頻…

Ubuntu-tomcat安裝部署

https://blog.csdn.net/weixin_43877427/article/details/144697087 Linux下Tomcat安裝與配置_tomcat linux安裝及配置教程-CSDN博客 一、下載Tomcat 1、官網下載 進入后根據自己需要選擇不同的版本&#xff0c;點擊download 進入后&#xff0c;在下圖標注的里邊選擇要下載…

希洛激活器策略思路

在復雜多變的外匯市場中&#xff0c;交易者常常尋求有效的工具來輔助決策。 希洛激活器作為一種綜合性的技術指標&#xff0c;結合了江恩理論、CCI&#xff08;商品通道指數&#xff09;和MACD&#xff08;移動平均收斂發散指標&#xff09;&#xff0c;旨在為交易者提供更為全…

n8n工作流自動化平臺的實操:本地化高級部署

一、本地高級部署 1.下載 docker pull docker.n8n.io/n8nio/n8n 2.運行 docker volume create n8n_data docker run -dit --name n8n -p 5678:5678 -v n8n_data:/home/node/.n8n -e N8N_SECURE_COOKIEfalse -e N8N_RUNNERS_ENABLEDtrue -e N8N_ENFORCE_SETTINGS_FIL…

vector和string的迭代器

1. 迭代器的本質 (1) 標準要求 C 標準要求 std::string 和 std::vector 的迭代器必須是 隨機訪問迭代器&#xff08;Random Access Iterator&#xff09;。 指針天然滿足隨機訪問迭代器的所有操作&#xff08;如 、--、n、* 等&#xff09;&#xff0c;因此可以直接用指針實現…

PyCharm代理配置全攻略:系統設置+Python運行環境一鍵搞定

文章目錄 1. 設置系統代理1.1 作用范圍1.2 使用場景1.3 設置步驟 2. 設置 python 運行/調試代理2.1 作用范圍2.2 使用場景2.3 設置步驟 Pycharm 工具作為一款強大的 IDE&#xff0c;其代理配置在實際開發中也是必不可少的&#xff0c;下面介紹下如何配置 Pycharm 的代理。 1. …