当前位置:首页 > 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如何使用全局变量

分享给朋友:

相关文章

如何使用ink react

如何使用ink react

安装 Ink 和 React 在项目目录下运行以下命令安装 Ink 和 React 的依赖: npm install ink react 创建基础组件 创建一个简单的 Ink 组件,例如 Hell…

如何使用 react native

如何使用 react native

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

react如何使用redux

react如何使用redux

使用 Redux 在 React 中的应用 Redux 是一个状态管理库,通常与 React 结合使用以管理全局状态。以下是具体实现步骤: 安装依赖 确保项目中已安装 redux 和 react-r…

react 如何使用canvas

react 如何使用canvas

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

全局变量实现vue

全局变量实现vue

全局变量在 Vue 中的实现方法 在 Vue 中实现全局变量可以通过多种方式,以下是几种常见的方法: 使用 Vue.prototype 通过扩展 Vue 的原型对象,可以添加全局变量或方法,这些变量…

react激光如何使用

react激光如何使用

安装React激光库 在项目中安装React激光库,通常通过npm或yarn完成。确保项目已初始化并具备React环境。 npm install react-laser-beam # 或 yar…