当前位置:首页 > 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如何衰减

react如何衰减

React 中的动画衰减效果实现 在 React 中实现衰减效果(如滚动衰减、拖动释放后的惯性滑动)通常需要结合物理动画原理或第三方动画库。以下是几种常见方法: 使用 CSS 动画和 @keyfra…

如何同步react

如何同步react

同步React组件状态的方法 使用useState和useEffect钩子组合可以同步React组件的状态。useState用于声明状态变量,useEffect用于监听状态变化并执行副作用。 imp…

react项目如何

react项目如何

创建React项目 使用create-react-app工具快速初始化项目。确保已安装Node.js(建议版本≥12.0.0),运行以下命令生成新项目: npx create-react-app m…

react路由如何配置

react路由如何配置

React 路由配置方法 安装 React Router 使用 npm 或 yarn 安装 React Router 的 DOM 版本: npm install react-router-dom #…

react如何激活跟踪

react如何激活跟踪

激活 React 跟踪的方法 React 跟踪通常指性能监控、状态变更追踪或用户行为分析。以下是几种常见场景的激活方式: 使用 React DevTools React DevTools 是官方…

如何使用 react native

如何使用 react native

安装开发环境 确保已安装 Node.js(建议使用 LTS 版本)。通过以下命令安装 React Native 命令行工具: npm install -g expo-cli 或使用 Yarn: y…