react hooks的useContext

简介:

React 的 useContext Hook 用于在函数组件中获取上下文(Context)的值。它允许我们在组件中订阅并访问由 React 的 Context API 提供的值。

首先,我们需要创建一个上下文对象。上下文对象被创建时,它包含一个 Provider 和一个 Consumer。

在创建上下文对象后,我们可以使用 useContext Hook 在函数组件中订阅上下文的值。

以下是使用 useContext Hook 的一般步骤:

  1. 创建上下文对象:

    import React, { createContext } from 'react';

    // 创建上下文对象
    const MyContext = createContext();

  2. 在顶层组件中通过 Provider 提供上下文的值:

    import React from 'react';
    import { MyContext } from './MyContext';

    function App() {
    return (
    // 使用 Provider 提供上下文的值
    <MyContext.Provider value="Hello, World!">
    <ChildComponent />
    </MyContext.Provider>
    );
    }

  3. 在子组件中使用 useContext Hook 获取上下文的值:

    import React, { useContext } from 'react';
    import { MyContext } from './MyContext';

    function ChildComponent() {
    // 使用 useContext Hook 获取上下文的值
    const contextValue = useContext(MyContext);

    return

    {contextValue}
    ;
    }

在上面的示例中,我们首先创建了一个名为 MyContext 的上下文对象,并将其导出供其他组件使用。

然后,在根组件 App 中,我们使用 MyContext.Provider 组件提供上下文的值,并将要共享的值传递给 value 属性。

最后,在子组件 ChildComponent 中,我们使用 useContext Hook 来接收 MyContext 上下文对象的值,并将其赋值给 contextValue 变量。然后,我们可以在组件中使用这个值。

需要注意的是,useContext Hook 接收一个上下文对象作为参数,并返回上下文的当前值。它只能在函数组件的顶层中使用,而不能在嵌套的函数或类中使用。

当上下文的值发生变化时,使用 useContext Hook 的组件会自动重新渲染。这使得我们可以便捷地使用 React 的 Context API 来共享和订阅全局状态。

全部代码:

复制代码
import React, { createContext, useContext } from 'react';
// 使用 useContext 函数可以避免在组件层层传递 props,从而简化了组件之间的数据共享。
// 创建一个 Context 对象
const MyContext = createContext();

// 在组件树中的某个位置提供 Context 的值
function MyProvider(props) {
    const contextValue = {...props.student};

    return <MyContext.Provider value={contextValue}>{props.children}</MyContext.Provider>;
}
function Bag() {
    const contextValue = useContext(MyContext);

    return (
        <div>
            <p>Bag: {contextValue.bag}</p>
        </div>
    );
}
// 使用 useContext 来使用 Context 中的值
function MyComponent() {
    const contextValue = useContext(MyContext);

    return (
        <div>
            <p>Name: {contextValue.name}</p>
            <p>Age: {contextValue.age}</p>
            <Bag></Bag>
        </div>
    );
}

// 在组件中使用 Context
export default function App() {
    const [state, setState] = React.useState({
        name: 'Tom',
        age: 18,
        bag: '两本书 一壶水'
    });
    return (
        <MyProvider student={state}>
            <MyComponent />
        </MyProvider>
    );
}
相关推荐
代码煮茶1 分钟前
Vue3 虚拟列表实战 | 解决长列表性能问题(十万条数据流畅渲染,附原理)
前端·javascript·vue.js
雨季mo浅忆3 分钟前
前端如何实现长连接之使用WebSocket长连接
前端·websocket
We་ct7 分钟前
LeetCode 201. 数字范围按位与:位运算高效解题指南
开发语言·前端·javascript·算法·leetcode·typescript
Patrick_Wilson16 分钟前
你的 MR 超过 500 行了吗?——大型代码合并请求拆分实战指南
前端·代码规范·前端工程化
神三元21 分钟前
大模型工具调用输出的 JSON,凭什么能保证不出错?
前端·ai编程
得物技术25 分钟前
基于 Cursor Agent 的流水线 AI CR 实践|得物技术
前端·程序员·全栈
188号安全攻城狮1 小时前
【前端安全】Trusted Types 全维度技术指南:CSP 原生 DOM XSS 防御终极方案
前端·安全·网络安全·xss
墨渊君1 小时前
从 0 到 1:用 Node 打通 OpenClaw WebSocket 通信全流程
前端·openai·agent
Novlan11 小时前
一个油猴脚本,解决掘金编辑器「转存失败」的烦恼
前端
前端老石人1 小时前
HTML 入门指南:从规范视角建立正确知识体系
开发语言·前端·html