React 第六十一節 Router 中 createMemoryRouter的使用詳解及案例注意事項

前言

createMemoryRouterReact Router 提供的一種特殊路由器,它將路由狀態存儲在內存中而不是瀏覽器的 URL 地址欄中
這種路由方式特別適用于測試非瀏覽器環境(如 React Native)以及需要完全控制路由歷史的場景。

一、createMemoryRouter 的主要用途

  1. 測試環境:在單元測試和集成測試中模擬路由行為
  2. 非瀏覽器環境:在 React Native、ElectronNode.js 服務器端渲染中使用
  3. 組件沙盒:在 Storybook 或類似工具中獨立運行路由組件
  4. 路由歷史控制:需要編程式控制完整路由歷史的場景
  5. 無 URL 環境:在不需要地址欄顯示路由變化的應用中使用

二、createMemoryRouter 與 createBrowserRouter 的關鍵區別

在這里插入圖片描述

三、createMemoryRouter 完整代碼示例

3.1、 基礎路由配置

// src/MemoryRouterDemo.jsx
import React from 'react';
import {createMemoryRouter,RouterProvider,Link,Outlet,useLocation
} from 'react-router-dom';// 頁面組件
function Home() {return (<div className="page"><h1>首頁</h1><p>歡迎使用內存路由示例</p><div className="page-nav"><Link to="/about" className="nav-link">關于我們</Link><Link to="/products" className="nav-link">產品列表</Link></div></div>);
}function About() {return (<div className="page"><h1>關于我們</h1><p>我們是一家專注于前端技術的公司</p><Link to="/" className="back-link">返回首頁</Link></div>);
}// 布局組件
function RootLayout() {const location = useLocation();return (<div className="app"><header className="app-header"><h1 className="logo">內存路由示例</h1><div className="url-display">當前路由: <code>{location.pathname || '/'}</code></div><nav className="main-nav"><Link to="/" className="nav-item">首頁</Link><Link to="/about" className="nav-item">關于</Link><Link to="/products" className="nav-item">產品</Link></nav></header><main className="app-content"><Outlet /> {/* 子路由渲染位置 */}</main><footer className="app-footer"><p>當前使用: <code>createMemoryRouter</code> | 路由歷史: {location.key}</p></footer></div>);
}// 創建內存路由配置
const router = createMemoryRouter([{path: "/",element: <RootLayout />,children: [{index: true,element: <Home />},{path: "about",element: <About />},{path: "products",element: <ProductsList />}]}
], {initialEntries: ["/"], // 初始路由initialIndex: 0 // 初始路由索引
});// 產品列表組件
function ProductsList() {const products = [{ id: 1, name: 'React 教程', price: 99 },{ id: 2, name: 'Node.js 實戰', price: 129 },{ id: 3, name: 'TypeScript 指南', price: 89 }];return (<div className="page"><h1>產品列表</h1><div className="products-grid">{products.map(product => (<div key={product.id} className="product-card"><h3>{product.name}</h3><p>價格:{product.price}</p></div>))}</div><Link to="/" className="back-link">返回首頁</Link></div>);
}// 導出使用內存路由的應用
export default function MemoryRouterDemo() {return <RouterProvider router={router} />;
}

3.2、 在 Storybook 中使用 createMemoryRouter

// src/stories/UserProfile.stories.jsx
import React from 'react';
import { createMemoryRouter

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

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

相關文章

透視黃金窗口:中國有機雜糧的高質量躍遷路徑

一、行業概覽&#xff1a;藍海市場背后的結構性紅利 伴隨全民健康意識提升和中產階層的擴大&#xff0c;中國有機雜糧市場正迎來新一輪結構性紅利期。根據《健康中國3.0時代&#xff1a;粗糧食品消費新趨勢與市場增長極》數據顯示&#xff0c;2020 年中國有機雜糧市場規模約 3…

實現p2p的webrtc-srs版本

1. 基本知識 1.1 webrtc 一、WebRTC的本質&#xff1a;實時通信的“網絡協議棧”類比 將WebRTC類比為Linux網絡協議棧極具洞察力&#xff0c;二者在架構設計和功能定位上高度相似&#xff1a; 分層協議棧架構 Linux網絡協議棧&#xff1a;從底層物理層到應用層&#xff08;如…

OpenCV CUDA模塊圖像變形------對圖像進行上采樣操作函數pyrUp()

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 函數用于對圖像進行 上采樣操作&#xff08;升采樣&#xff09;&#xff0c;是 GPU 加速版本的 高斯金字塔向上采樣&#xff08;Gaussian Pyrami…

勒貝格測度、勒貝格積分

又要接觸測度論了。隨著隨機規劃的不斷深入&#xff0c;如果涉及到證明部分&#xff0c;測度論的知識幾乎不可或缺。 測度論的相關書籍&#xff0c;基本都非常艱澀難讀&#xff0c;對于非數學專業出身的人入門非常不易。從十幾年前開始&#xff0c;我很難把測度論教材看到超過…

UE5 學習系列(一)創建一個游戲工程

這個系類筆記用來記錄學習 UE 過程中遇到的一些問題與解決方案。整個博客的動機是在使用 AirSim 中遇到了不少性能瓶頸&#xff0c;因此想要系統性地去學一下 UE &#xff0c;這個系列博客主要是跟著 B 站大佬 歐醬&#xff5e; 和 GenJi是真想教會你 的系列視頻 《500 分鐘學會…

Nginx 負載均衡、高可用及動靜分離

Nginx 負載均衡、高可用及動靜分離深度實踐與原理剖析 在互聯網應用架構不斷演進的今天&#xff0c;如何高效地處理大量用戶請求、保障服務的穩定性與性能&#xff0c;成為開發者和運維人員面臨的關鍵挑戰。Nginx 作為一款高性能的 Web 服務器和反向代理服務器&#xff0c;憑借…

stm32溫濕度-超聲波-LCD1602結合項目(Proteus仿真程序)

資料下載地址&#xff1a;stm32溫濕度-超聲波-LCD1602結合項目(Proteus仿真程序) 程序實現功能&#xff1a; 程序基于stm32芯片實現了控制LED燈亮滅、按鍵控制、串口通信、電機控制、溫濕度數據采集、超聲波測距、LCD顯示屏顯示內容這幾個功能&#xff0c;并用proteus8進行仿…

新一代python管理工具--uv

uv 工具全方位介紹 起源與背景 uv 是由 Astral&#xff08;pipx 作者&#xff09;團隊用 Rust 語言開發的新一代 Python 包和環境管理工具。其目標是解決傳統 pip/venv/conda 在依賴解析慢、環境隔離繁瑣、命令復雜等方面的痛點&#xff0c;為現代 Python 項目提供極速、自動…

路由交換技術-思科拓撲搭建

配置流程 1.搭建網絡拓撲圖。 2.規劃配置IP地址&#xff0c;內網配置為192.168.1.0和192.168.2.0網段。 3.劃分vlan10&#xff0c;vlan20&#xff0c;vlan30。 4.配置靜態、動態路由。配置路由器Router7&#xff0c;使內外網互通。 5.配置鏈路聚合。通過鏈路聚合技術&#xff…

清華大學視覺空間智能新突破!Spatial-MLLM:提升多模態大語言模型的視覺空間智能能力

作者&#xff1a;Diankun Wu, Fangfu Liu, Yi?Hsin Hung, Yueqi Duan 單位&#xff1a;清華大學 論文標題&#xff1a;Spatial-MLLM: Boosting MLLM Capabilities in Visual-based Spatial Intelligence 論文鏈接&#xff1a;https://arxiv.org/pdf/2505.23747 項目主頁&a…

AI與機器學習ML:利用Python 從零實現神經網絡

自線性回歸以來&#xff0c;我們已經涵蓋了很多領域。在本期中&#xff0c;我們將開始了解神經網絡內部工作原理的旅程*。* 如果一個人試圖了解任何使用生成式 AI 的工具、應用程序、網站或其他系統的內部工作原理&#xff0c;那么掌握神經網絡的架構至關重要。在這個故事中&a…

Vim 匹配跳轉與搜索命令完整學習筆記

Vim 匹配跳轉與搜索命令完整學習筆記 文章目錄 Vim 匹配跳轉與搜索命令完整學習筆記1. 括號/結構匹配% - 括號匹配跳轉[[ / ]] - 函數定義跳轉[{ / ]} - 代碼塊邊界跳轉 2. 精確單詞搜索* - 向下精確搜索# - 向上精確搜索 3. 模糊單詞搜索g* - 向下模糊搜索g# - 向上模糊搜索 4…

安卓9.0系統修改定制化____系列 ROM解打包 修改 講解 導讀篇

專欄系列前言&#xff1a; &#x1f49d;&#x1f49d;&#x1f49d;本專欄作者從事rom系統修改以及手機維修 刷機多年。從當年山寨機開始。歷經安卓4.--至目前的安卓15.合作伙伴遍及各類工作室以及PDA商家 私人玩友等。在廣告機 平板 pda設備 會議機 車機的rom修改中略有經…

Vue3本地存儲實現方案

在 Vue 3 中實現本地存儲&#xff08;如用戶配置數據&#xff09;&#xff0c;主要通過瀏覽器提供的 localStorage 或 sessionStorage API。以下是詳細實現方案&#xff1a; 基礎實現&#xff08;原生 API&#xff09; javascript 復制 下載 // 存儲數據 localStorage.set…

計算機視覺與深度學習 | 2024年至2025年圖像匹配算法總結(原理,公式,代碼,開源鏈接)

圖像匹配算法 一、核心算法分類與技術路線1. **傳統局部特征 + 匹配優化**(魯棒性強,適合資源受限場景)2. **端到端密集匹配網絡**(高精度,適合復雜形變/弱紋理)3. **基于光流思想的匹配網絡**4. **2024-2025年新趨勢**二、核心開源工具庫匯總三、典型代碼流程(以LoFTR為…

瑞芯微 MIPI D-PHY 接收器(RX)驅動學習筆記

驅動文件位置 driver/phy/rockchip/phy-rockchip-mipi-rx.c 1 重要結構體 struct mipidphy_priv {struct device *dev;//表示與驅動程序關聯的設備。它用于設備管理&#xff0c;如設備注冊、注銷等。struct regmap *regmap_grf;//用于映射和訪問通用寄存器文件&#xff08;Gen…

MySQL從入門到DBA深度學習指南

目錄 引言 MySQL基礎入門 數據庫基礎概念 MySQL安裝與配置 SQL語言進階 數據庫設計與規范化 數據庫設計原則 表結構設計 MySQL核心管理 用戶權限管理 備份與恢復 性能優化基礎 高級管理與高可用 高可用與集群 故障診斷與監控 安全與審計 DBA實戰與運維 性能調…

多個機器人同時加載在rviz及gazebo同一個場景中

1. 配置launch文件 gazebo的加載相對容易&#xff0c;但rviz中加載&#xff0c;需要構建完整的tf樹&#xff08;world → map&#xff08;或map_merged&#xff09;→ odom → base_footprint → base_link → base_scan&#xff09;才能正常顯示&#xff0c;launch文件主要是…

Text2SQL、Text2API基礎

你有一個能力超強但“不太懂行”的助手&#xff08;大語言模型LLM&#xff09;。它能說會道&#xff0c;知識淵博&#xff0c;但它&#xff1a; 不懂你的數據庫&#xff1a; 不知道你的數據庫里有哪些表&#xff0c;表里有哪些字段&#xff0c;這些字段代表什么意思。不懂你的…

JDK 8u231安裝教程 - Windows 64位下載安裝及環境變量配置指南

下載安裝包 把jdk-8u231-windows-x64.exe這個文件下載下來&#xff0c;下載鏈接&#xff1a;https://pan.quark.cn/s/a610ca7e5e9d&#xff0c;隨便放哪兒&#xff0c;比如桌面或者下載文件夾。 雙擊運行安裝 找到下載好的那個exe文件&#xff0c;直接雙擊打開。可能會彈個窗口…