You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React中使用Context API实现兄弟组件传值失败问题求助

问题原因与修复方案

嘿,我一眼就看出问题所在啦!你把NumberContext.Provider放在了<TheButton>组件内部,可<Display>组件和<TheButton>是兄弟关系,它根本不在这个Provider的包裹范围内,自然获取不到你传递的test值啦。

React Context的核心逻辑是:只有被Provider直接或间接包裹的组件(也就是Provider的子组件/后代组件),才能通过useContext拿到Provider提供的值。你的<Display>组件在<App>下面,和<TheButton>平级,完全没被Provider覆盖到,所以拿到的是Context的默认值(这里因为创建Context时没传默认值,所以是undefined)。

修复后的完整代码

把Provider移到父组件<App>里,让两个兄弟组件都处于Provider的包裹之下:

import React from "react";
import ReactDOM from "react-dom";

export const NumberContext = React.createContext();

function App() {
  return (
    <NumberContext.Provider value={"test"}>
      <div>
        <TheButton />
        <Display />
      </div>
    </NumberContext.Provider>
  );
}

function TheButton() {
  return <button>Click me</button>;
}

function Display() {
  const context = React.useContext(NumberContext);
  return <div>The answer {context}.</div>;
}

ReactDOM.render(<App />, document.querySelector("#root"));

这样修改后,<Display>就能正常拿到test值,页面会显示The answer test.啦。

小提示:以后使用Context时,记得把Provider放在需要访问该Context的所有组件的共同父组件上,确保所有目标组件都在Provider的层级范围内哦~

内容的提问来源于stack exchange,提问作者AngularDebutant

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:34:48