ReactJS 教程

ReactJS 主页 ReactJS 简介 ReactJS 路线图 ReactJS 下载安装和环境配置 ReactJS 功能 ReactJS 优势和缺点 ReactJS 架构 ReactJS 创建 React 应用程序 ReactJS JSX ReactJS 组件 ReactJS 嵌套组件 ReactJS 使用组件 ReactJS 集合组件 ReactJS 样式 ReactJS 属性 (props) ReactJS 使用属性创建组件 ReactJS props 验证 ReactJS 构造函数 ReactJS 组件生命周期 ReactJS 事件管理 ReactJS 创建事件感知组件 ReactJS Expense Manager 事件 ReactJS 状态管理 ReactJS 状态管理 API ReactJS 无状态组件 ReactJS Hooks 进行状态管理 ReactJS Hooks 的组件生命周期 ReactJS 布局组件 ReactJS 分页 ReactJS Material UI ReactJS Http 客户端编程 ReactJS 表单编程 ReactJS 受控组件 ReactJS 非受控组件 ReactJS Formik ReactJS 条件渲染 ReactJS 列表 ReactJS Key 键 ReactJS 路由 ReactJS Redux ReactJS 动画 ReactJS Bootstrap ReactJS Map ReactJS 表格 ReactJS 使用 Flux 管理状态 ReactJS 测试 ReactJS CLI 命令 ReactJS 构建和部署 ReactJS 示例

Hooks

ReactJS Hooks 简介 ReactJS 使用 useState ReactJS 使用 useEffect ReactJS 使用 useContext ReactJS 使用 useRef ReactJS 使用 useReducer ReactJS 使用 useCallback ReactJS 使用 useMemo ReactJS 自定义 Hooks

ReactJS 高级

ReactJS 可访问性 ReactJS 代码拆分 ReactJS 上下文 ReactJS 错误边界 ReactJS 转发 Refs ReactJS 片段 ReactJS 高阶组件 ReactJS 与其他库集成 ReactJS 优化性能 ReactJS Profiler API ReactJS Portals ReactJS 不使用 ES6 ECMAScript ReactJS 不使用 JSX 的 React ReactJS Reconciliation ReactJS Refs 和 DOM ReactJS 渲染道具 ReactJS 静态类型检查 ReactJS 严格模式 ReactJS Web 组件

其他概念

ReactJS 日期选择器 ReactJS Helmet ReactJS 内联样式 ReactJS PropTypes ReactJS BrowserRouter ReactJS DOM ReactJS 轮播 ReactJS 图标 ReactJS 表单组件 ReactJS 参考 API

ReactJS 有用资源

ReactJS 快速指南 ReactJS 备忘录 Axios 备忘录 ReactJS 有用资源 ReactJS 讨论


ReactJS - createContext()

CreateContext 是一个 React 函数,它允许我们为组件创建上下文。此函数提供或接收数据,而无需手动将 props 发送到组件树的每个级别。当数据需要在应用程序中的许多组件之间共享时,上下文是最重要的。

语法

const MyContext = createContext(defaultVal)

参数

defaultVal − defaultVal 是当读取上下文的组件上方的树中没有匹配的上下文提供程序时,我们希望上下文具有的值。如果我们没有逻辑默认值,请将其保留为 null。

返回值

createContext() 函数返回一个上下文对象。此对象有两个组件:提供者和消费者。 Provider 允许组件共享数据,Consumer 允许组件访问共享数据。

简单来说,createContext 就像创建一个特殊的房间,组件可以把想要共享的信息放在那里,其他组件可以毫不费力地获取这些信息。它使 React 应用中的数据共享更加有条理,也更简单。

示例

示例 − 在语言之间切换

React 中的 Context 允许组件共享数据而无需通过 props 传递数据。下面是一个简单的示例 − 创建和使用 context 的方法

创建 context − 在下面的代码中,我们创建了一个默认值为"English"的 LanguageContext。

import { createContext } from 'react';
const LanguageContext = createContext('English');

在组件中使用上下文 − 在下面的代码中,Greeting 组件现在可以访问 LanguageContext,而无需将其作为 prop 接收。

import React, { useContext } from 'react';

function Greeting() {
   const language = useContext(LanguageContext);   
   return <p>{`Hello, ${language}!`}</p>;
}

在更高级别的组件中,包含以下上下文值 −

在 App 组件中,我们使用 LanguageContext.Provider 提供上下文值,在我们的例子中它是"语言"。此上下文将传递给 Greeting 组件及其中包含的任何其他组件。当语言发生变化时,它们将自动更新。

import React, { useState } from 'react';

function App() {
   const [language, setLanguage] = useState('English');   
   return (
      <LanguageContext.Provider value={language}>
      <Greeting />
      <button onClick={() => setLanguage('Hindi')}>Switch to Hindi</button>
      </LanguageContext.Provider>
   );
}

export default App;

例如,如果我们点击"切换到印地语"选项,Greeting 组件将更改为说"Hello, Hindi!"

完整代码

这样,Context 提供了一种干净、高效的方式来在我们的 React 应用程序中传递数据,而无需手动将其传递到组件树的每个级别。

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

// 创建一个 LanguageContext
const LanguageContext = createContext('English');

// 创建一个 Greeting 组件
function Greeting() {
   const language = useContext(LanguageContext);   
   return <p>{`Hello, ${language}!`}</p>;
}

// 创建应用程序组件
function App() {
   const [language, setLanguage] = useState('English');   
   return (
      <div style={{marginLeft: '500px'}}>
      <LanguageContext.Provider value={language}>
         <Greeting />
         <button onClick={() => setLanguage('Hindi')}>Switch to Hindi</button>
      </LanguageContext.Provider>
      </div>
   );
}

export default App;

输出

hello english

示例 − 更改背景颜色应用

此 React 应用展示了如何使用 createContext、useContext 和 useState Hooks(钩子)来 创建一个简单的主题功能,其中组件的背景颜色 根据所选的颜色主题而变化。此应用的代码如下所示 −

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

// 创建 ColorContext
const ColorContext = createContext('lightblue');

// 创建 ThemedComponent 组件
function ThemedComponent() {
    const color = useContext(ColorContext);
    return <div style={{ backgroundColor: color, padding: '20px' }}>Themed
    Component</div>;
}

// 创建 ColorApp 组件
function ColorApp() {
   const [color, setColor] = useState('lightblue');
   return (
      <div>
         <ColorContext.Provider value={color}>
            <ThemedComponent />
            <button onClick={() => setColor('lightblue')}>Switch to blue</button>
            <button onClick={() => setColor('lightpink')}>Switch to Pink</button>
         </ColorContext.Provider>
      </div>
   );
}
export default ColorApp;

输出

themed component

示例 − 主题切换器应用

此 React 应用展示了如何使用 createContext、useContext 和 useState Hooks(钩子)来实现主题切换功能。组件的背景颜色会根据用户与按钮的交互在浅色和深色主题之间切换。此应用的代码如下所示 −

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

// 创建 ThemeContext
const ThemeContext = createContext('light');

// 创建 ThemedContent 组件
function ThemedContent() {
   const theme = useContext(ThemeContext);
   return <div style={{ background: theme === 'light' ? '#fff' : '#333', padding: '20px' }}>Themed Content</div>;
}

// 创建 ThemeSwitcherApp 组件
function ThemeSwitcherApp() {
   const [theme, setTheme] = useState('light');
   return (
      <div>
         <ThemeContext.Provider value={theme}>
         <ThemedContent />
         <button onClick={() => setTheme(theme === 'light' ? 'dark' : 'light')}>Toggle Theme</button>
         </ThemeContext.Provider>
      </div>
   );
}

export default ThemeSwitcherApp;

输出

toggle theme

总结

在本教程中,我们了解了 React 函数 createContext,它使创建组件上下文变得简单。createContext 的主要目标是允许组件共享或接收数据,而无需手动将 props 传递到组件树的每一层。当必须在应用程序的多个组件之间交换数据时,这尤其有用。

reactjs_reference_api.html