useContext

收藏931

阅读2223

更新时间2025-08-20

React 上下文

React 上下文是一种全局管理状态的方法。

它可以与 useState Hook 一起使用,比单独使用 useState 更容易在深度嵌套的组件之间共享状态。


问题

状态应该由堆栈中需要访问状态的最高父组件持有。

为了说明,我们有许多嵌套组件。 堆栈顶部和底部的组件需要访问状态。

要在没有上下文的情况下执行此操作,我们需要将状态作为"道具"传递给每个嵌套组件。 这称为"支柱钻孔"。

实例:

通过嵌套组件传递"props":

import { useState } from "react";
import ReactDOM from "react-dom/client";

function Component1() {
  const [user, setUser] = useState("Jesse Hall");

  return (
    <>
      

{`Hello ${user}!`}

); } function Component2({ user }) { return ( <>

Component 2

); } function Component3({ user }) { return ( <>

Component 3

); } function Component4({ user }) { return ( <>

Component 4

); } function Component5({ user }) { return ( <>

Component 5

{`Hello ${user} again!`}

); } const root = ReactDOM.createRoot(document.getElementById('root')); root.render();

运行实例 »

即使组件 2-4 不需要状态,它们也必须将状态传递给组件 5。


解决方案

解决方案是创建上下文。

创建上下文

要创建上下文,你必须导入 createContext 并初始化它:

import { useState, createContext } from "react";
import ReactDOM from "react-dom/client";

const UserContext = createContext()

接下来我们将使用 Context Provider 来包装需要状态 Context 的组件树。

上下文提供者

在 Context Provider 中包装子组件并提供状态值。

function Component1() {
  const [user, setUser] = useState("Jesse Hall");

  return (
    
      

{`Hello ${user}!`}

); }

现在,此树中的所有组件都可以访问用户上下文。

使用 useContext Hook

为了在子组件中使用上下文,我们需要使用 useContext Hook 来访问它。

首先,在导入语句中包含useContext:

import { useState, createContext, useContext } from "react";

然后就可以在所有组件中访问用户上下文了:

function Component5() {
  const user = useContext(UserContext);

  return (
    <>
      

Component 5

{`Hello ${user} again!`}

); }

完整示例

实例:

这是使用 React Context 的完整示例:

import { useState, createContext, useContext } from "react";
import ReactDOM from "react-dom/client";

const UserContext = createContext();

function Component1() {
  const [user, setUser] = useState("Jesse Hall");

  return (
    
      

{`Hello ${user}!`}

); } function Component2() { return ( <>

Component 2

); } function Component3() { return ( <>

Component 3

); } function Component4() { return ( <>

Component 4

); } function Component5() { const user = useContext(UserContext); return ( <>

Component 5

{`Hello ${user} again!`}

); } const root = ReactDOM.createRoot(document.getElementById('root')); root.render();

运行实例 »


相关

视频

RELATED VIDEOS

更多

免费

Web前端开发极速入门
初级 Web前端开发极速入门

219920次学习

收藏

免费

前端入门_HTML5
初级 前端入门_HTML5

616946次学习

收藏

免费

30分钟学会网站布局
初级 30分钟学会网站布局

238440次学习

收藏

免费

CSS视频教程-玉女心经版
初级 CSS视频教程-玉女心经版

393054次学习

收藏

免费

独孤九贱(1)_HTML5视频教程

免费

独孤九贱(6)_jQuery视频教程

免费

独孤九贱(7)_Bootstrap视频教程

免费

独孤九贱(2)_CSS视频教程
初级 独孤九贱(2)_CSS视频教程

229605次学习

收藏

科技资讯

更多

精选课程

更多
前端入门_HTML5
前端入门_HTML5

共29课时

61.8万人学习

CSS视频教程-玉女心经版
CSS视频教程-玉女心经版

共25课时

39.3万人学习

JavaScript极速入门_玉女心经系列
JavaScript极速入门_玉女心经系列

共43课时

71万人学习

独孤九贱(1)_HTML5视频教程
独孤九贱(1)_HTML5视频教程

共25课时

61.7万人学习

独孤九贱(2)_CSS视频教程
独孤九贱(2)_CSS视频教程

共22课时

23万人学习

独孤九贱(3)_JavaScript视频教程
独孤九贱(3)_JavaScript视频教程

共28课时

33.9万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时

125.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号