当前位置:首页 > React

react如何使用全局变量

2026-01-25 15:12:19React

使用 Context API 创建全局变量

React 的 Context API 是官方推荐的全局状态管理方案,适合跨组件共享数据。通过 React.createContext 创建上下文,再通过 Provider 传递数据,子组件通过 useContextConsumer 访问。

// 创建 Context
const GlobalContext = React.createContext();

// 在根组件提供数据
function App() {
  const [globalData, setGlobalData] = useState({});
  return (
    <GlobalContext.Provider value={{ globalData, setGlobalData }}>
      <ChildComponent />
    </GlobalContext.Provider>
  );
}

// 子组件消费数据
function ChildComponent() {
  const { globalData } = useContext(GlobalContext);
  return <div>{globalData.key}</div>;
}

使用 Redux 管理全局状态

Redux 是流行的第三方状态管理库,适合复杂应用。通过 store 集中管理状态,组件通过 connectuseSelector 访问。

// 创建 store
import { createStore } from 'redux';
const initialState = { count: 0 };
const reducer = (state = initialState, action) => {
  switch (action.type) {
    case 'INCREMENT': return { ...state, count: state.count + 1 };
    default: return state;
  }
};
const store = createStore(reducer);

// 在根组件注入 store
import { Provider } from 'react-redux';
function App() {
  return (
    <Provider store={store}>
      <Counter />
    </Provider>
  );
}

// 组件连接 store
function Counter() {
  const count = useSelector(state => state.count);
  const dispatch = useDispatch();
  return <button onClick={() => dispatch({ type: 'INCREMENT' })}>{count}</button>;
}

使用 Window 对象挂载变量

在浏览器环境中,可以通过 window 对象直接挂载全局变量,但这种方式缺乏响应式更新,通常不推荐。

// 设置全局变量
window.appConfig = { apiUrl: 'https://example.com' };

// 组件中使用
function Component() {
  return <div>{window.appConfig.apiUrl}</div>;
}

使用自定义 Hook 封装全局逻辑

通过自定义 Hook 可以封装全局状态逻辑,结合 useStateuseReducer 实现响应式更新。

// 创建自定义 Hook
function useGlobalState() {
  const [state, setState] = useState({ theme: 'light' });
  const toggleTheme = () => setState(prev => ({
    ...prev,
    theme: prev.theme === 'light' ? 'dark' : 'light'
  }));
  return { ...state, toggleTheme };
}

// 组件中使用
function ThemeToggle() {
  const { theme, toggleTheme } = useGlobalState();
  return <button onClick={toggleTheme}>Current: {theme}</button>;
}

使用 Zustand 轻量级状态管理

Zustand 是更轻量的状态管理库,API 简洁,适合中小型应用。

import create from 'zustand';

// 创建 store
const useStore = create(set => ({
  bears: 0,
  increase: () => set(state => ({ bears: state.bears + 1 })),
}));

// 组件中使用
function BearCounter() {
  const bears = useStore(state => state.bears);
  const increase = useStore(state => state.increase);
  return <button onClick={increase}>{bears}</button>;
}

注意事项

  • 性能优化: Context 的频繁更新会导致所有消费者重新渲染,可通过拆分上下文或使用 useMemo 优化。
  • 类型安全: 使用 TypeScript 时,为全局状态定义明确的类型接口。
  • 服务端渲染: 在 Next.js 等框架中,避免直接使用 window 对象,需通过条件渲染或状态注入处理。

react如何使用全局变量

分享给朋友:

相关文章

react如何使用路由

react如何使用路由

使用 React Router 的基本方法 React Router 是 React 应用中实现路由功能的核心库。以下是基本使用方法: 安装 React Router 依赖包: npm insta…

react如何使用swiper

react如何使用swiper

安装 Swiper 依赖 在 React 项目中使用 Swiper 前,需要安装 Swiper 的核心库和 React 组件库。通过 npm 或 yarn 安装以下依赖: npm install…

react 如何使用canvas

react 如何使用canvas

使用 Canvas 在 React 中的方法 基本用法 在 React 中使用 canvas 需要通过 useRef 或 createRef 获取 DOM 节点。以下是一个简单的示例: impor…

react如何使用ueditor

react如何使用ueditor

安装 UEditor 下载 UEditor 的官方版本,解压后将整个文件夹放入项目的 public 目录下。确保可以通过 URL 直接访问 UEditor 的资源文件,例如 public/uedito…

react refs 如何使用

react refs 如何使用

React Refs 的基本概念 Refs 是 React 提供的一种访问 DOM 节点或 React 组件实例的方式。通常在 React 的数据流中,父子组件通过 props 进行通信,但在某些情况…

react如何使用webview

react如何使用webview

使用 React 实现 WebView 的方法 在 React 中,可以通过不同的方式实现 WebView 功能,具体取决于开发环境(如 React Native 或 Web 应用)。以下是常见的实现…