发布于 2026-01-06 10 阅读
0

React | Context API 与 Zustand

React | Context API 与 Zustand

各位开发者同仁大家好,今天我们将讨论 React 上下文 API 和 Zustand。

介绍

  • React 的 useContext 是一个内置的 hook,它允许你在应用程序内共享状态,而无需在每一层手动传递 props。

  • Zustand 是一个小巧、快速且可扩展的 Bearbones 状态管理库,旨在为 React 应用程序中的全局状态管理提供更直接的方式。

使用上下文概述

useContext是什么?

useContext 是一个 React hook,它允许你使用上下文值,而无需将组件包装在 Context.Consumer 中。

如何使用 useContext

1. 创建上下文



import React, { createContext, useContext, useState } from 'react';

const MyContext = createContext();

const MyProvider = ({ children }) => {
  const [state, setState] = useState('default value');

  return (
    <MyContext.Provider value={{ state, setState }}>
      {children}
    </MyContext.Provider>
  );
};


Enter fullscreen mode Exit fullscreen mode

2. 吸收上下文



const MyComponent = () => {
  const { state, setState } = useContext(MyContext);

  return (
    <div>
      <p>{state}</p>
      <button onClick={() => setState('new value')}>Change State</button>
    </div>
  );
};


Enter fullscreen mode Exit fullscreen mode

使用案例:

  • 多个组件共享状态

  • 避免螺旋桨钻井

状态概述

什么是 Zustand?

Zustand 是一个小巧、快速且灵活的状态管理库,它使用 Hooks 来管理 React 应用中的状态。与 Redux 等一些更全面的状态管理解决方案相比,它更轻量级、更易于使用。

如何使用 Zustand

1. 安装 Zustand:



npm install zustand


Enter fullscreen mode Exit fullscreen mode

2. 创建店铺



import create from 'zustand';

const useStore = create((set) => ({
  state: 'default value',
  setState: (newState) => set({ state: newState })
}));


Enter fullscreen mode Exit fullscreen mode

3. 消费商店



const MyComponent = () => {
  const { state, setState } = useStore();

  return (
    <div>
      <p>{state}</p>
      <button onClick={() => setState('new value')}>Change State</button>
    </div>
  );
};


Enter fullscreen mode Exit fullscreen mode

用例

  • 全球状态管理

  • 中小型应用

  • 性能关键型应用

useContext 和 Zustand 之间的区别

上下文 API 祖斯坦特
设置复杂度 简单直接,是 React 的一部分。 需要额外的库和设置,但提供了更多功能。
表现 对于嵌套过深的组件和频繁的重新渲染,可能会导致性能问题。 针对性能进行了优化,最大限度地减少了重新渲染次数,并提高了可扩展性。
国家管理 适用于更简单的状态共享。 更适合复杂的状态管理需求,具有中间件、持久化和操作等功能。
可扩展性 对于大型应用而言,可扩展性较差。 通过更好地分离关注点,提高可扩展性。
持久性 useContext 本身并不内置跨会话持久化状态的功能。如果您需要持久化状态(例如,跨页面重新加载),通常需要使用浏览器存储 API(例如 localStorage 或 sessionStorage)手动实现。这需要额外的代码来保存和检索存储中的上下文状态,以及在应用程序启动时从存储中初始化上下文状态。 Zustand 内置了状态持久化支持。Zustand 可以轻松集成浏览器存储 API,让您能够以最少的样板代码实现状态的持久化和恢复。这通常是通过使用 Zustand 提供的中间件来实现的,例如 zustand/middleware。

持久状态

安装 Zusstand 中间件:



npm install zustand zustand/middleware


Enter fullscreen mode Exit fullscreen mode

创建一个持久化存储



import create from 'zustand';
import { persist } from 'zustand/middleware';

const useStore = create(
  persist(
    (set) => ({
      state: 'default value',
      setState: (newState) => set({ state: newState })
    }),
    {
      name: 'my-store', // unique name
      getStorage: () => localStorage // use localStorage or sessionStorage for persistence
    }
  )
);


Enter fullscreen mode Exit fullscreen mode

照常消费。



const MyComponent = () => {
  const { state, setState } = useStore();

  return (
    <div>
      <p>{state}</p>
      <button onClick={() => setState('new value')}>Change State</button>
    </div>
  );
};


Enter fullscreen mode Exit fullscreen mode

使用上下文的优缺点

优点

  • 内置:无需外部库。

  • 简洁的API:易于理解和使用。

  • 集成性强:可与其他 React 功能无缝协作。

缺点

  • 性能:可能导致不必要的重新渲染。

  • 可扩展性:不适用于大型应用程序。

  • 样板代码:复杂状态需要大量的样板代码。

Zustand 的优缺点

优点

  • 性能:针对最小重新渲染次数进行了优化。

  • 可扩展性:更适合大型应用程序。

  • 灵活性:更多功能,用于复杂状态管理。

  • 简洁性:简单的 API 和最少的样板代码。

缺点

  • 外部依赖:需要额外的库。

  • 学习曲线:新用户可能需要稍加学习。

结论

虽然 useContext 是 React 中用于简单状态共享的强大工具,但 Zustand 为管理全局状态提供了更高效、更具可扩展性的解决方案,尤其适用于大型应用程序。通过用 Zustand 替换 useContext,您可以获得更好的性能和可维护性。

感谢您阅读此帖!
您可以通过以下方式联系我:
Instagram - https://www.instagram.com/supremacism__shubh/
LinkedIn - https://www.linkedin.com/in/shubham-tiwari-b7544b193/
邮箱 - shubhmtiwri00@gmail.com

您可以通过以下链接向我捐款,谢谢👇👇
☕ --> https://www.buymeacoffee.com/waaduheck <--

也请查看这些帖子。

文章来源:https://dev.to/shubhamtiwari909/react-context-api-vs-zustand-pki