当前位置:首页 > React

react如何存取全局变量

2026-03-11 11:01:15React

使用Context API

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

react如何存取全局变量

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访问或更新。

react如何存取全局变量

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对象挂载全局变量。此方法简单但缺乏响应式更新,需谨慎使用。

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 的基础知识 React 是一个用于构建用户界面的 JavaScript 库。学习 React 的第一步是掌握其核心概念,包括组件、状态(State)、属性(Props)和生命周期方法…

vue实现全局变量

vue实现全局变量

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

react如何diff

react如何diff

React Diff 算法原理 React 的 Diff 算法是 Virtual DOM 的核心部分,用于高效更新真实 DOM。其核心思想是通过对比新旧 Virtual DOM 树的差异,最小化 DO…

如何监控react性能

如何监控react性能

使用 React Profiler API React 16.5 及以上版本内置了 Profiler API,可直接测量组件渲染时间。通过 <React.Profiler> 包裹目标组件,…

如何升级react native

如何升级react native

升级 React Native 的步骤 检查当前版本 运行以下命令查看当前项目的 React Native 版本: react-native --version 更新 React Native CL…

react如何实现混入

react如何实现混入

在React中实现混入(Mixin)功能可以通过以下几种方式实现,React官方已不推荐使用传统的React.createClass混入方式,但可通过高阶组件或自定义Hook替代。 高阶组件(HOC…