当前位置:首页 > React

react如何存取全局变量

2026-03-11 11:01:15React

使用Context API

React的Context API是官方推荐的全局状态管理方案,适用于跨组件共享数据。创建Context后,通过Provider传递数据,子组件通过useContextConsumer访问。

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

const GlobalContext = createContext();

export function App() {
  return (
    <GlobalContext.Provider value={{ theme: 'dark' }}>
      <ChildComponent />
    </GlobalContext.Provider>
  );
}

function ChildComponent() {
  const { theme } = useContext(GlobalContext);
  return <div>Current theme: {theme}</div>;
}

使用状态管理库

Redux或MobX等第三方库适合复杂全局状态管理。以Redux为例,通过Store集中管理状态,组件通过useSelectoruseDispatch访问或更新。

import { configureStore, createSlice } from '@reduxjs/toolkit';
import { Provider, useSelector, useDispatch } from 'react-redux';

const globalSlice = createSlice({
  name: 'global',
  initialState: { count: 0 },
  reducers: {
    increment: (state) => { state.count += 1; }
  }
});

const store = configureStore({ reducer: globalSlice.reducer });

function Counter() {
  const count = useSelector((state) => state.global.count);
  const dispatch = useDispatch();
  return <button onClick={() => dispatch(globalSlice.actions.increment())}>{count}</button>;
}

使用自定义Hook封装

通过自定义Hook封装全局变量,结合useStateuseReducer实现简易全局状态管理。适合小型应用或特定场景。

import { useState, useEffect } from 'react';

let globalState = {};
const listeners = new Set();

export function useGlobalState(key, initialValue) {
  const [state, setState] = useState(globalState[key] || initialValue);

  useEffect(() => {
    const listener = () => setState(globalState[key]);
    listeners.add(listener);
    return () => listeners.delete(listener);
  }, [key]);

  const setGlobalState = (value) => {
    globalState = { ...globalState, [key]: value };
    listeners.forEach((listener) => listener());
  };

  return [state, setGlobalState];
}

使用Window对象

在浏览器环境中,可通过window对象挂载全局变量。此方法简单但缺乏响应式更新,需谨慎使用。

react如何存取全局变量

window.appConfig = { apiUrl: 'https://api.example.com' };

function ConfigDisplay() {
  return <div>API endpoint: {window.appConfig.apiUrl}</div>;
}

注意事项

  • 性能优化: Context API可能导致不必要的渲染,可通过拆分Context或使用memo优化。
  • 类型安全: 使用TypeScript时,为全局变量定义明确类型以避免运行时错误。
  • 服务端渲染: 避免直接使用window对象,需通过环境变量或动态检测处理。

分享给朋友:

相关文章

react 如何继承

react 如何继承

在React中,组件继承并非推荐的设计模式(官方更推崇组合优于继承),但技术上仍可通过以下方式实现类似效果: 使用ES6类继承 通过extends关键字继承父组件类,子组件可访问父组件的生命周期方法…

react如何销毁

react如何销毁

销毁 React 组件 在 React 中,销毁组件通常涉及清理副作用(如事件监听器、定时器或订阅)以防止内存泄漏。以下是实现组件销毁的常见方法: 使用 useEffect 清理副作用 在函数组件…

vue实现全局变量

vue实现全局变量

在Vue中实现全局变量的几种方法 使用Vue.prototype 通过Vue.prototype可以挂载全局变量或方法,在任何组件中通过this访问。 // main.js Vue.prototyp…

react native 如何

react native 如何

React Native 开发基础 React Native 是一个用于构建跨平台移动应用的框架,允许开发者使用 JavaScript 和 React 编写代码,同时生成原生 iOS 和 Androi…

react如何取消渲染

react如何取消渲染

取消渲染的方法 在React中,取消渲染通常指的是在某些条件下阻止组件渲染或中断正在进行的渲染过程。以下是几种常见的方法: 条件渲染 通过条件判断决定是否渲染组件或部分内容。可以使用if语句或三元运…

react 如何运行

react 如何运行

运行 React 项目的步骤 安装 Node.js 确保系统已安装 Node.js(建议版本 16+),可通过官网下载并安装。安装后验证版本: node -v npm -v 创建 React 项目…