当前位置:首页 > React

react 单例实现

2026-01-26 21:41:17React

单例模式简介

单例模式确保一个类只有一个实例,并提供全局访问点。在 React 中,可以通过模块导出、静态属性或上下文(Context)实现单例。

模块导出的单例

利用 JavaScript 模块的缓存机制,导出的对象天然是单例。

// SingletonService.js
class SingletonService {
  constructor() {
    this.data = [];
  }

  addItem(item) {
    this.data.push(item);
  }
}

const instance = new SingletonService();
export default instance;

在组件中直接导入该实例:

react 单例实现

import singletonService from './SingletonService';

function ComponentA() {
  singletonService.addItem('Item from A');
  return <div>Component A</div>;
}

静态属性单例

通过类的静态属性保存唯一实例。

class SingletonService {
  static instance = null;

  constructor() {
    if (SingletonService.instance) {
      return SingletonService.instance;
    }
    this.data = [];
    SingletonService.instance = this;
  }

  addItem(item) {
    this.data.push(item);
  }
}

export default SingletonService;

使用时:

react 单例实现

const service1 = new SingletonService();
const service2 = new SingletonService();
console.log(service1 === service2); // true

React Context 单例

通过 React Context 提供全局共享状态,间接实现单例。

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

const SingletonContext = createContext();

export function SingletonProvider({ children }) {
  const data = [];

  const addItem = (item) => {
    data.push(item);
  };

  return (
    <SingletonContext.Provider value={{ data, addItem }}>
      {children}
    </SingletonContext.Provider>
  );
}

export function useSingleton() {
  return useContext(SingletonContext);
}

在组件中使用:

function ComponentB() {
  const { addItem } = useSingleton();
  addItem('Item from B');
  return <div>Component B</div>;
}

注意事项

  • 模块导出:适用于纯逻辑层,不依赖 React 生命周期。
  • 静态属性:需注意构造函数逻辑的幂等性。
  • Context:适合需要响应式更新的场景,但会触发组件重新渲染。

根据需求选择合适的方式,模块导出和静态属性适合非 UI 逻辑,Context 适合状态管理。

标签: react
分享给朋友:

相关文章

react native 如何

react native 如何

安装 React Native 开发环境 确保系统已安装 Node.js(建议版本 16 或更高)。通过以下命令安装 React Native CLI 工具: npm install -g rea…

react如何记忆

react如何记忆

React 记忆技术 在 React 中,记忆(Memoization)是一种优化技术,用于避免不必要的重新渲染或计算。React 提供了多种内置方法和第三方库来实现记忆功能。 useMemo Ho…

如何生成react代码

如何生成react代码

使用 Create React App 生成项目 安装 Node.js 后,通过命令行工具运行以下命令创建新项目: npx create-react-app my-app cd my-app npm…

react moment如何使用

react moment如何使用

安装 react-moment 通过 npm 或 yarn 安装 react-moment: npm install react-moment 或 yarn add react-moment…

如何降低react版本

如何降低react版本

降低 React 项目版本的步骤 检查当前 React 版本 运行以下命令查看项目中安装的 React 当前版本: npm list react 或 yarn list react 修…

react 如何分页

react 如何分页

分页实现方法 在React中实现分页功能可以通过多种方式完成,具体取决于数据来源(如API或本地数据)和UI库的选择。以下是常见的实现方法: 使用本地数据分页 对于存储在组件状态或Context中…