React 从入门到生产(五):状态管理选型

ubuntu配置ftp 核心竞争力,怎么才能提高呢?成年人想要改变生活,逆转状态?那就开始学习吧~万事开头难,但是程序员这一条路坚持几年后发展空间还是非常大的,一切重在坚持。为了帮助大家更好更高效的准备面试,特别整理了《前端工程师面试手册》电子稿文件。 阅读详情

创作者: Yardon  |  GitHub: github.com/YardonYan  |  版本: v1.0



什么时候需要状态管理

先泼一盆冷水:大多数 React 应用不需要 Redux。

这句话不是我说的,是 Redux 的作者 Dan Abramov 本人说的。他在 2020 年就公开表示,在他参与的大多数项目中,Redux 已经不再是最好的选择。

那么什么时候真的需要「状态管理库」?

当你的应用满足以下任意一个条件时:

  • 超过 3 层嵌套的组件需要共享同一个状态
  • 多个不相关的页面需要访问同一份数据
  • 状态变更的逻辑非常复杂(多个 action 之间有依赖关系)
  • 需要时间旅行调试(undo/redo)

其他情况?useState + useContext 足够了。


React 自带的方案回顾

在介绍第三方库之前,先把 React 自带的工具说清楚。

Props Drilling(属性穿透)

最基础的方式就是通过 props 一层层往下传:

App → Header → NavBar → Logo
  ↓
UserMenu → Avatar → Dropdown → Item

如果 UserMenu 和 NavBar 都需要访问 currentUser,而 currentUser 定义在 App 组件里——你得把它一层层往下传。这在浅层嵌套时没问题,但如果你的组件树有 5-6 层深,每层都要"过手"一个跟它们毫无关系的 props,这就成了「属性穿透地狱」。

想象你在一栋公寓里,每层都住着互不相识的邻居,但暖气管道要穿过每一家的客厅。物业公司的员工(中间组件)被迫了解每家每户的暖气情况——尽管他只需要把暖气送到就行了。

Context API:内置的跨组件通信

Context 就是来解决这个问题的——让你在组件树的任意位置访问数据,而不需要手动层层传递。


Context API:轻量级全局状态

基本用法

// ThemeContext.jsx
import { createContext, useContext, useState } from 'react';

const ThemeContext = createContext();

export function ThemeProvider({ children }) {
  const [theme, setTheme] = useState('dark');

  function toggleTheme() {
    setTheme(t => t === 'dark' ? 'light' : 'dark');
  }

  return (
    <ThemeContext.Provider value={{ theme, toggleTheme }}>
      {children}
    </ThemeContext.Provider>
  );
}

export function useTheme() {
  const context = useContext(ThemeContext);
  if (!context) throw new Error('useTheme 必须在 ThemeProvider 内使用');
  return context;
}
// App.jsx
import { ThemeProvider } from './ThemeContext';

function App() {
  return (
    <ThemeProvider>
      <Dashboard />
    </ThemeProvider>
  );
}

// 任意子组件中
function SettingsPage() {
  const { theme, toggleTheme } = useTheme();
  return <button onClick={toggleTheme}>当前: {theme}</button>;
}

Context 的性能陷阱

Context 最大的坑在于:Provider 下的所有组件都会在 Context 值变化时重新渲染。

// ❌ 每秒更新一次,所有消费者都 re-render
function App() {
  const [time, setTime] = useState(Date.now());

  useEffect(() => {
    const id = setInterval(() => setTime(Date.now()), 1000);
    return () => clearInterval(id);
  }, []);

  return <ThemeContext.Provider value={{ time }}>...</ThemeContext.Provider>;
}

// ✅ 只暴露必要的状态
function App() {
  const [time, setTime] = useState(Date.now());
  const { theme } = useThemeContext();  // 只订阅需要的

  useEffect(() => {
    const id = setInterval(() => setTime(Date.now()), 1000);
    return () => clearInterval(id);
  }, []);

  return <ThemeContext.Provider value={{ theme, time }}>...</ThemeContext.Provider>;
}

最佳实践:按功能拆分成多个独立的 Context。

// 主题一个 Context,用户信息一个 Context,购物车一个 Context
// 每个 Context 只订阅它真正需要的数据
<ThemeContext.Provider value={theme}>
  <UserContext.Provider value={user}>
    <CartContext.Provider value={cart}>
      <App />
    </CartContext.Provider>
  </UserContext.Provider>
</ThemeContext.Provider>

这样只有购物车变了,Header 里的主题切换按钮才不会无辜地重新渲染。


Zustand:极简主义的代表

Zustand 是 2020 年后最火的状态管理库。它用起来非常简单——5 分钟就能上手。

核心概念

// store/useCartStore.js
import { create } from &#039;zustand&#039;;

const useCartStore = create((set, get) =&gt; ({
  items: [],
  total: 0,

  addItem: (product) =&gt; set((state) =&gt; ({
    items: [...state.items, product],
    total: state.total + product.price,
  })),

  removeItem: (id) =&gt; set((state) =&gt; {
    const item = state.items.find(i =&gt; i.id === id);
    return {
      items: state.items.filter(i =&gt; i.id !== id),
      total: state.total - (item?.price || 0),
    };
  }),

  clearCart: () =&gt; set({ items: [], total: 0 }),

  // 直接读取 state,不需要 hooks
  getItemCount: () =&gt; get().items.length,
}));
// 在组件中使用
function CartIcon() {
  const itemCount = useCartStore(s =&gt; s.items.length);
  return &lt;span&gt;🛒 {itemCount}&lt;/span&gt;;
}

function CartPage() {
  const { items, total, removeItem, clearCart } = useCartStore();
  return (
    &lt;div&gt;
      {items.map(item =&gt; &lt;CartItem key={item.id} item={item} onRemove={removeItem} /&gt;)}
      &lt;p&gt;总计: ¥{total}&lt;/p&gt;
      &lt;button onClick={clearCart}&gt;清空购物车&lt;/button&gt;
    &lt;/div&gt;
  );
}

为什么选择 Zustand

特性ZustandRedux Toolkit
代码量极简(~50行一个store)需要 action/reducer/store boilerplate
学习曲线几乎为零中等(概念多)
DevTools支持强大(时间旅行等)
适用场景中小型应用大型复杂应用
包大小~1KB~15KB

Redux Toolkit:复杂应用的选择

Redux 曾经是 React 状态管理的代名词。2019 年 Redux Toolkit 的出现大幅降低了使用门槛,但它的复杂性依然高于 Zustand。

核心概念:Slice

// features/cart/cartSlice.js
import { createSlice } from &#039;@reduxjs/toolkit&#039;;

const cartSlice = createSlice({
  name: &#039;cart&#039;,
  initialState: { items: [], total: 0 },
  reducers: {
    addItem: (state, action) =&gt; {
      state.items.push(action.payload);
      state.total += action.payload.price;
    },
    removeItem: (state, action) =&gt; {
      const idx = state.items.findIndex(i =&gt; i.id === action.payload);
      if (idx !== -1) {
        state.total -= state.items[idx].price;
        state.items.splice(idx, 1);
      }
    },
    clearCart: (state) =&gt; {
      state.items = [];
      state.total = 0;
    },
  },
});

export const { addItem, removeItem, clearCart } = cartSlice.actions;
export default cartSlice.reducer;
// store/index.js
import { configureStore } from &#039;@reduxjs/toolkit&#039;;
import cartReducer from &#039;./features/cart/cartSlice&#039;;

export const store = configureStore({
  reducer: {
    cart: cartReducer,
    user: userReducer,
    // ...
  },
});
// 组件中使用
import { useSelector, useDispatch } from &#039;react-redux&#039;;
import { addItem } from &#039;./features/cart/cartSlice&#039;;

function ProductPage({ product }) {
  const dispatch = useDispatch();
  const isInCart = useSelector(s =&gt; 
    s.cart.items.some(i =&gt; i.id === product.id)
  );

  return (
    &lt;div&gt;
      &lt;h1&gt;{product.name}&lt;/h1&gt;
      &lt;button
        disabled={isInCart}
        onClick={() =&gt; dispatch(addItem(product))}
      &gt;
        {isInCart ? &#039;已在购物车&#039; : &#039;加入购物车&#039;}
      &lt;/button&gt;
    &lt;/div&gt;
  );
}

Redux Toolkit 适合什么时候?当你有多个开发者协作的大型项目,需要严格的状态流转规范、时间旅行调试、批量操作日志时,Redux 的约束反而是优点——它强制你用规范的方式做事,不容易出现"状态不知道从哪改的"的情况。


Jotai:原子化状态管理

Jotai 是一个相对小众但很有特色的方案。它的核心概念是原子(Atom)——最小的状态单元。

// atoms.js
import { atom } from &#039;jotai&#039;;

// 基础原子
const userAtom = atom(null);
const notificationCountAtom = atom(0);

// 派生原子(类似 useMemo)
const hasNotificationsAtom = atom(get =&gt; get(notificationCountAtom) &gt; 0);

// 写原子
const addNotificationAtom = atom(
  null,
  (get, set) =&gt; {
    const current = get(notificationCountAtom);
    set(notificationCountAtom, current + 1);
  }
);
// 组件中只订阅需要的原子
function NotificationBadge() {
  const count = useAtom(notificationCountAtom)[0];
  return count &gt; 0 ? &lt;span&gt;{count}&lt;/span&gt; : null;
}

function NotificationButton() {
  const [, addNotification] = useAtom(addNotificationAtom);
  return &lt;button onClick={addNotification}&gt;有新消息&lt;/button&gt;;
}

Jotai 的优势是细粒度更新——只有真正用到某个原子值的组件才会重新渲染。它适合状态很多、更新很频繁的应用(比如实时协作工具、数据可视化面板)。


选型决策树

应用规模?
├── 小型(几个页面,状态简单)
│   └── useState + Context API ✅ 够了
│
├── 中型(10+ 页面,多人协作)
│   ├── 状态种类多、更新频繁
│   │   └── Zustand ✅ 推荐
│   │
│   └── 需要强规范、强调试能力
│       └── Redux Toolkit ✅
│
└── 大型(复杂状态流转、undo/redo)
    └── Redux Toolkit ✅ 或 Recoil

我的推荐(2026 年):

  • 90% 的项目:useState + Context 或 Zustand
  • 5% 的项目需要强规范:Redux Toolkit
  • 5% 的项目状态极细:Jotai

本章小结

工具适用场景代码量学习成本
useState + Context小型应用、简单全局状态少无
Context API(多 Context)中型应用、分域全局状态中低
Zustand中小型应用、需要灵活状态极少极低
Redux Toolkit大型、复杂、多人协作多中
Jotai细粒度状态、频繁更新少中

状态管理的本质是数据的流向和共享。选什么工具不重要,重要的是理解为什么需要它、它解决的是什么问题。下一章我们聊聊 React Router——单页应用如何实现页面跳转和 URL 管理。


📌 创作者: Yardon  |  🏠 个人网站: GlimmerAI.top

📖 本章是「React 从入门到生产」系列的第 5 章。上一章:自定义Hook | 下一章:路由与导航

🌟 如果你觉得有帮助,欢迎访问 GlimmerAI.top 查看我的更多作品。欢迎大家来观看!

「2024」React 状态管理入门 简单来说,状态指的是某一时刻应用中的数据或界面的呈现。这些数据可能包括用户填写表单的信息、应用内的用户偏好设置、应用的页面/路由状态、或者任何其他可能改变UI的信息。状态管理是前端开发中处理用户界面(UI)状态的过程,在复杂应用中尤其重要。随着应用规模的增长,管理不同组件和模块之间的状态变得越来越复杂。在没有状态管理的情况下,应用组件通常需要进行大量的props传递(即将数据从一个组件传递到另一个组件),或者使用事件来通信,这在小型或简单的应用中是可行的。但在大型或复杂的项目中,这些方法难以维护和跟踪状态的 阅读详情

相关推荐

10个React状态管理库推荐

本文为您推荐的10款React状态管理库。这些库各有特色,有的注重性能和效率,有的注重简洁和易用性,有的则注重灵活性和可定制性。在选择状态管理库时,您需要根据自己的需求和团队的实际情况来进行选择。希望本文能为您的前端开发带来一些帮助和启示。

fefdfg的博客 3874

BEVFormer与TensorRT的完美结合:如何实现4倍推理加速?

本文详细解析了如何通过TensorRT的量化技术和自定义插件实现BEVFormer模型的4倍推理加速,同时保持精度损失小于1%。文章从模型架构与部署挑战入手,深入探讨了计算图优化、自定义插件开发和量化校准策略,并提供了完整的部署流程和性能调优技巧,为自动驾驶领域的实时3D感知提供了高效解决方案。

bean的博客 221

react的状态管理库

1.Redux2.Mobx3.Recoil1)RecoilRoot2)常用的hook函数(1)useRecoilState(2)useRecoilValue(3)useSetRecoilState

qq_42349528的博客 3702

ISP Tuning实战指南:从基础到高级的色彩与亮度优化

本文详细介绍了ISP Tuning的基础概念与高级调优技术,包括黑电平校正(BLC)、自动白平衡(AWB)、色彩校正矩阵(CCM)和Gamma曲线调整等核心算法。通过实战案例和调试技巧,帮助工程师提升摄像头成像质量,解决高光过曝、暗部噪点等常见问题,适用于智能门铃、车载摄像头等多种场景。

weixin_30879169的博客 108

【软件介绍】RVC本地部署使用方法

【摘要】RVC是一款功能强大的开源语音转换工具,具有实时处理、多音效选择、高质量音频处理等特点。文章详细介绍了RVC的安装与使用方法:1)配置Python环境;2)根据电脑系统选择对应安装包解压;3)启动程序进入浏览器操作界面。重点讲解了声音克隆的关键步骤:建议使用短音频素材,选择合适训练方法(推荐pm或rmvpe),设置100次训练轮数,生成的模型文件存入weights文件夹。最后通过上传音频即可实现声音克隆。操作过程需注意保持程序运行状态,并提供了相关资源下载地址。

心动的那一刻,记忆便盛开了花 2978

【react框架】告别过去,现在的react-redux状态管理库既好理解又好用!

React的状态管理库一开始是个第三方库,叫做Redux。后来Facebook发现这个库的使用量很大,于是官方就也出了个功能一样的库叫做react-redux。这就是原本Redux和react-redux的关系。我之前使用过类组件时期的Redux、函数组件初期的Redux,发现都特别难用,哪些简化Redux理解和操作的第三方库也不是那么好用。对应的调试工具还是类似vsconsole那种入侵代码的库。整体和当时的VueX对比,使用体验还是差很多的。

庞囧的博客 1246

无感健康监测的未来:毫米波雷达如何重新定义睡眠科技与居家养老

毫米波雷达技术正重新定义无感健康监测,特别是在睡眠科技与居家养老领域。通过精准监测呼吸、心率和体动,无需穿戴设备即可实现临床级精度。结合合宙Air700E开发板,构建了完整的远程看护解决方案,为老年人提供跌倒检测、异常报警等安全保障,同时保护用户隐私。

cake8的博客 568

React状态管理

通过这个例子,我们学习了如何使用和useReducer状态管理:将购物车的状态和逻辑集中管理。组件复用:商品列表和购物车组件各自独立,但共享相同的状态。代码结构清晰:将上下文、组件和主应用分离,易于维护和扩展。通过模块化的方式进行管理实现statestate和 actions单独抽离,模块化管理。使用简化了 Redux 的代码。在组件中通过和访问和操作状态。这种模式非常适合大型应用的状态管理,代码结构清晰,易于维护和扩展。😊。

m0_44973790的博客 1304

沧小海深入剖析xilinx的GTP/GTX核,掌握高速串行收发机制——第六章 接收端结构及功能说明

总目录在这哦~ https://blog.csdn.net/z123canghai/article/details/107700878 第六章 接收端结构及功能说明 子目录 6.1 RX的模拟前端 6.2 RX的OOB信号 6.3 RX的均衡器 6.4 RX的CDR 时钟数据恢复 6.5 RX时钟输出结构 6.6 RX 的极性控制 6.7 RX 的PRBS 6.8 Rx字节、字的对齐功能 6.9 Rx接收弹性缓冲区 6.10 Rx的时钟纠正 6.11 Rx接收通道绑定 6...

滄海的博客 1万+

实战:爬取某小程序的订单数据(解析小程序 API 参数)

本文以美团外卖小程序为例,详细分析了电商类小程序订单数据接口的技术实现与采集方法。首先通过抓包定位核心接口,解析其请求参数;重点破解了token验证机制与sign签名加密算法,通过逆向分析还原参数生成逻辑;最后基于Python实现了订单数据的自动化爬取与存储。文章强调数据采集需遵守法律合规性,提供应对反爬机制的策略,并指出了必须在获得合法授权的前提下使用这些技术。该研究为数据采集工程师提供了实用的技术参考,但必须严格遵循"最小必要"原则,确保不违反平台规则和用户隐私保护法规。

2503_91057718的博客 2317

入门指南:从零开始学习ReactJS

ReactJS是一个强大的JavaScript库,用于构建用户界面。它由Facebook开发,并于2013年首次发布。自那时以来,React已成为前端开发中最受欢迎的库之一,许多公司和开发者都在使用它来构建高性能、交互式的Web应用程序。本文将向您介绍ReactJS的基础知识,并通过实践示例来帮助您入门。我们将从React的核心概念开始,逐步深入,直到您能够构建简单的React应用为止。

努力是为了站在万人之中,成为别人的光 2万+

【智能车Code review】——小S与中S道路判断

基本思想: 找到中线的左拐点和右拐点,并且计算出两点之间的空间距离。通过限制空间距离,分为中S和小S。 注意这种情况:当20行以下的中线斜率比较陡,此时可以通过人为限制设定,将第0行的中线设置为拐点。 if (flag_centre_right_point == 0 && flag_centre_left_point == 1 && parameterB >= 0.5 && centre_left_point[0] >= 33) { .

hanhan的博客 6104

ReactJS 101快速入门:如何在30分钟内搭建你的第一个React应用

ReactJS是一个由Facebook开发的用于构建用户界面的JavaScript库,它采用组件化思想,让开发者能够轻松构建交互式UI。本教程将带你快速上手React,在30分钟内完成第一个React应用的搭建,非常适合新手入门学习。 ## 准备工作:安装必要环境 在开始之前,确保你的电脑上已经安装了Node.js和npm。如果还没有安装,可以从Node.js官网下载并安装,npm会随Node

gitblog_00561的博客 1758

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

React 状态管理选型实战:Zustand、Jotai、Redux Toolkit 对比

Zustand、Jotai、Redux Toolkit 分别适用于不同的应用场景。Zustand 以简约和零依赖取胜,Jotai 以细粒度性能和并发模式适配见长,RTK 以工程化规范和调试工具取胜。选型时应综合评估包体积、渲染性能、TypeScript 支持和团队技术栈熟悉度。

weixin_49475940的博客 4008

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

React19开发:从入门到资深

欢迎踏入React 19的璀璨星河。在这里,代码不仅是指令,更是构建灵动数字世界的诗篇。React,以其声明式的优雅与组件化的智慧,早已重塑前端疆域。而React 19,并非简单的迭代,它是一次轻盈的跃迁——Server Components如预制的星辰,在云端悄然点亮;Actions化繁为简,让数据流转如溪水潺潺;文档元数据触手可及,资源加载暗蕴锋芒。

YunWisdom 1779

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

ReactJS 101代码规范终极指南:Airbnb React/JSX风格指南的实际应用

ReactJS 101作为React开发者的入门指南,不仅教授React基础知识,还特别强调了代码规范的重要性。在React开发中,遵循统一的代码规范是提升团队协作效率和代码质量的关键。本文将深入探讨如何在ReactJS 101项目中实际应用Airbnb React/JSX风格指南,帮助开发者编写更专业、更易维护的React代码。 ## 📋 为什么需要React代码规范? 在团队协作开发中,

gitblog_00879的博客 1798

React 状态管理完全指南:从入门到选型

简单说,状态(State)就是组件会变化的数据,它决定了组件的渲染结果。组件内部的输入值、开关状态 → 本地状态多个组件共用的用户信息、购物车 → 全局状态状态变化 → 自动触发组件重新渲染。状态管理的本质,就是高效管理数据的存储、更新和共享。React 状态管理已经非常成熟,不再需要复杂的学习成本本地状态 →useStateuseReducer简单全局 →Context推荐全局 →Zustand大型项目 →。

qq_40617614的博客 438

展望2025:React状态管理该如何进行技术选型?

有些Provider开始相互依赖,有些则根本不适合置于应用根部,于是你试图将它们下移到更靠近消费方的地方——但在下一次重构中却忘得一干二净,最终导致某些依赖Context的组件行为异常,因为它们“丢失”了上层的Provider。又或者,你可以选择更高阶的路径(或许是高阶中的高阶?但如果你需要跨越三层以上的组件层级来传递状态,或者类似的情况在整个应用中反复出现,那么这很可能是一个信号:你的架构出问题了。任何带有“你需要忘掉之前学的一切”暗示,或引入某种“全新的、概念化的思维模型”的工具,都会立即被我排除。

React_Community的博客 1077

React状态管理:从Context到Redux,我的选型心得

今天想和大家聊聊React状态管理这个永恒的话题——特别是Context API和Redux这对"欢喜冤家"。

欢迎来到我的前端博客!这里汇集了关于前端开发的最新技术、实用工具和经验分享。我将为你提供详细的教程、代码示例和实战案例,帮助你掌握Web开发的核心概念和技能。不论你是初学者还是有经验的开发者,这个博客都适合你。 1065

reactjs redux集中式状态管理最简入门案例

reactjs redux集中式状态管理最简入门案例

学亮编程手记 851

ReactJS 101生态系统解析:React周边工具链的选择与使用

React作为Facebook开源的JavaScript库,专注于构建用户界面,其生态系统已发展成为现代化Web开发的核心。本文将深入解析React周边工具链,帮助开发者理解并选择适合的工具组合,提升开发效率和应用性能。 ## 一、构建工具:Webpack与Browserify的对比 在React开发中,构建工具是项目工程化的基础。目前主流的选择包括Webpack和Browserify+Gul

gitblog_00171的博客 823

React进阶:状态管理选择题

React进阶:状态管理选择题

欢迎来到这里,希望文章能对你有所帮助 1367

React 状态管理工具

Redux 是一个以单一状态树为核心的状态管理工具,强调不可变状态和纯函数更新。它适合大型应用,提供了完整的状态管理解决方案。MobX 是一个响应式状态管理工具,通过观察(observable)状态变化自动更新 UI。它强调使用最少的代码实现功能。Recoil 是 Facebook 提供的一种状态管理工具,支持原子化状态管理(即状态拆分成多个最小单元)。Zustand 是一个轻量级状态管理库,以简单、快速、灵活著称。React 的状态管理工具丰富多样,每种工具都有其适用场景和特点。简单优先。

Flying_Fish_roe的博客 1571

【React】redux状态管理、react-redux状态管理高级封装模块化

redux是一个JavaScript容器,用于进行全局的状态管理;redux三大核心;单一数据源头:所有state都会被挂载到一个叫Object tree中,Object tree又只存在唯一的Store(理解为容器,存储Object tree,Object tree挂在state)中;State是只读的:唯一改变state的方法就是触发action,触发action,store.dispatch ( {type: '字符串' , val: 1}),val自定义使用纯函数来执行修改:编写。

m0_61049675的博客 1910

React 状态管理

在 React 中,状态(State)是组件的核心动态数据,它决定了组件的展示和行为。状态的变化通常由用户的交互或外部数据的更新触发,而 React 会根据新的状态重新渲染组件。本地状态(Local State):特定于单个组件的状态,通常通过useState或useReducer管理。全局状态(Global State):在多个组件之间共享的数据,如用户登录信息、主题设置等。服务状态(Server State):从远程 API 获取的数据,例如分页数据或搜索结果。临时状态(UI State)

Flying_Fish_roe的博客 1799
上一篇: React 从入门到生产(四):自定义 Hook
下一篇: React 从入门到生产(六):路由与导航
Yardon_Official
博客等级 码龄5年 800粉丝 207原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yardon_Official

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值