当前位置:首页 > 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;

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

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;

使用时:

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);
}

在组件中使用:

react 单例实现

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

注意事项

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

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

标签: react
分享给朋友:

相关文章

react如何销毁

react如何销毁

React 组件销毁的机制 在 React 中,组件的销毁通常由 React 的生命周期管理。当组件从 DOM 中移除时,React 会自动触发销毁相关的生命周期方法。以下是关键点: 组件的销毁通常…

如何配置react

如何配置react

配置React项目的步骤 安装Node.js和npm 确保系统已安装Node.js(包含npm)。可通过官网下载并安装最新版本。安装完成后,运行以下命令验证版本: node -v npm -v 创建…

react如何开发

react如何开发

React 开发基础步骤 安装 Node.js 和 npm/yarn 确保系统已安装 Node.js(包含 npm)或 Yarn。React 项目依赖这些工具管理包和运行脚本。官方推荐使用 Node.…

如何清洁react

如何清洁react

清洁 React 项目的方法 删除未使用的依赖项 运行 npm ls 或 yarn list 检查已安装的依赖项,使用 npm uninstall <package> 或 yarn rem…

react如何引入

react如何引入

引入React的方法 React可以通过多种方式引入项目,具体取决于项目需求和开发环境。以下是常见的几种方法: 通过CDN引入 在HTML文件中直接通过CDN链接引入React和ReactDOM:…

react 如何获取dom

react 如何获取dom

获取 DOM 的方法 在 React 中,可以通过 useRef 或 createRef 来获取 DOM 节点。useRef 是函数组件中常用的方法,而 createRef 通常用于类组件。 使用…