Page Context 设计 | React.createContext 入门

前言

React 是一种流行的 JavaScript 库,用于构建用户界面。它提供了一种组件化的开发方式,使得前端开发变得更加简单和可维护。在 React 中,组件之间的数据传递是非常重要的,而 React 提供了多种方式来处理这种数据传递,其中包括 Context API。本文将重点介绍 React 中的 React.createContext 方法,这是使用 Context API 的第一步。

什么是 Context API?

在 React 应用程序中,有时候需要在组件之间共享某些数据,而不必通过一层层的传递 props。这时就可以使用 Context API。它提供了一种在组件树中传递数据的方法,而不必手动地通过 props 层层传递。这样可以使得组件之间的数据共享变得更加简单和便捷。

React.createContext 方法

React.createContext 是 Context API 的一部分,它用于创建一个 Context 对象。这个对象包含了两个组件:ProviderConsumer

1. 创建一个 Context 对象

js 复制代码
const MyContext = React.createContext(defaultValue);

React.createContext 接受一个参数 defaultValue,表示当组件在树中没有找到对应的 Provider 时,所采用的默认值。这个默认值在没有 Provider 包裹时会被用到。

2. Provider

Provider 组件用于向下传递当前的 Context 值。它接受一个 value 属性,这个属性的值可以是任何 JavaScript 对象。

js 复制代码
<MyContext.Provider value={/* 某个值 */}>
  {/* 子组件 */}
</MyContext.Provider>

3. Consumer

Consumer 组件用于从上层 Context 中读取当前的值。它是一个函数组件,接受一个函数作为其子元素。这个函数接受当前的 Context 值作为参数,并返回一个 React 元素。

js 复制代码
<MyContext.Consumer>
  {value => /* 基于 context 值进行渲染 */}
</MyContext.Consumer>

示例

下面是一个简单的示例,演示了如何使用 React.createContext 方法:

jsx 复制代码
// 创建一个 Context 对象
const ThemeContext = React.createContext('light');

class App extends React.Component {
  render() {
    return (
      // 提供一个 ThemeContext.Provider,并设置 value 为 dark
      <ThemeContext.Provider value="dark">
        {/* 渲染子组件 */}
        <Toolbar />
      </ThemeContext.Provider>
    );
  }
}

function Toolbar() {
  // 使用 ThemeContext.Consumer 获取当前的 theme 值
  return (
    <ThemeContext.Consumer>
      {theme => (
        <div style={{ backgroundColor: theme === 'dark' ? '#333' : '#fff', color: theme === 'dark' ? '#fff' : '#333' }}>
          {/* 根据 theme 渲染不同的内容 */}
          {theme === 'dark' ? 'Dark Theme' : 'Light Theme'}
        </div>
      )}
    </ThemeContext.Consumer>
  );
}

ReactDOM.render(<App />, document.getElementById('root'));

在这个示例中,ThemeContext.Provider 提供了一个值为 'dark' 的 theme,并将其向下传递给 Toolbar 组件。Toolbar 组件通过 ThemeContext.Consumer 获取当前的 theme 值,并根据其值渲染不同的内容。

Page Context 设计

在前端页面设计时,有几个时常需要复用的功能:

  1. 消息通知
  2. 后端请求
  3. 国际化
  4. 页面跳转

可以将这四个功能使用 React.createContext 将4个功能整合进一个Page Context 以减少代码重复。Page.ts代码如下,其中全局message使用的是antd组件,国际化使用的是react-intl

ts 复制代码
import React, { ReactNode } from 'react';
import { useNavigate } from 'react-router-dom';
import { message } from 'antd';
import { useIntl } from 'react-intl';
import { Requester } from '../Requester';

export interface PageProps {
  user: object;
}

const defaultValue: any = undefined;
export const PageContext = React.createContext(defaultValue);

export const Page: React.FC<{ children: ReactNode }> = ({ children }) => {
  const [messageApi, contextHolder] = message.useMessage();
  const navigate = useNavigate();
  const intl = useIntl();

  return (
    <PageContext.Provider value={{ messageApi, navigate, Requester, intl }}>
      {contextHolder}
      {children}
    </PageContext.Provider>
  );
};

总结

React.createContext 方法是使用 Context API 的第一步,它用于创建一个 Context 对象。通过 Provider 和 Consumer 组件,我们可以在 React 应用程序中实现组件之间的数据共享,而不必手动地通过 props 层层传递。这种方式使得代码更加简洁和可维护,是 React 开发中的一个重要技术点。

相关推荐
崔庆才丨静觅3 小时前
hCaptcha 验证码图像识别 API 对接教程
前端
passerby60614 小时前
完成前端时间处理的另一块版图
前端·github·web components
掘了4 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅4 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅5 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
崔庆才丨静觅5 小时前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment5 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
崔庆才丨静觅5 小时前
刷屏全网的“nano-banana”API接入指南!0.1元/张量产高清创意图,开发者必藏
前端
剪刀石头布啊5 小时前
jwt介绍
前端
爱敲代码的小鱼6 小时前
AJAX(异步交互的技术来实现从服务端中获取数据):
前端·javascript·ajax