在 React 中将数据从孙子传递给父母

Posted

技术标签:

【中文标题】在 React 中将数据从孙子传递给父母【英文标题】:Pass data from grandchild to parent in React 【发布时间】:2021-12-28 16:21:42 【问题描述】:

您好,我在孙子组件中有一个名为 info[] 的数组,当单击按钮访问该数组时,我想要我的父组件。我还希望兄弟组件能够访问它。这怎么可能..我有点困惑。 我应该使用 use-context 吗?

谢谢!

【问题讨论】:

我认为 React Context API 是一个不错的选择,因为您可以将它提供给您想要的任意数量的文件,并且避免弄乱您的代码。 【参考方案1】:

如果我明白你在问什么,它可能是这样的。

const GrandChild = ( setParentInfo ) => 
  const info = [1, 2, 3];

  const handleClick = () => 
    setParentInfo(info);
  ;

  return <button onClick=handleClick>Set parent info</button>;
;

const Sibling = ( parentInfo ) => 
  return <div>parentInfo.length</div>; // Do whatever you need with parentInfo
;

const Parent = () => 
  const [parentInfo, setParentInfo] = useState([]);

  return (
    <div>
      <GrandChild setParentInfo=setParentInfo />
      <Sibling parentInfo=parentInfo />
    </div>
  );
;

这里你不需要上下文,因为你没有那么多层,但如果你需要深入研究道具而不是使用上下文。

【讨论】:

【参考方案2】:

如果您想在应用程序中的许多不同组件之间共享状态,并且您认为将状态作为道具传递是“一个非常漫长的旅程”,我可能您应该考虑使用上下文挂钩之类的东西。

无论您刚才描述的哪种方式看起来都是一个简单的用例,女巫不需要上下文。

你应该做的是: 在父级上,您有 [state, setState] 在当前组件上将 setStat 作为 prop 传递给子组件,然后从子组件将 setState 作为 prop 传递给孙子组件。

然后在孙子组件上,您可以执行以下操作: 道具.setState(数组)。 所以现在在父组件上,变量 state 将使用来自孙子组件的值数组进行更新。

如果你想将状态传递给兄弟组件,我假设你的兄弟是父组件的兄弟, 然后,您应该将状态从父级上移一级,假设父级的父级.. 并执行我上面描述的操作。

所以在你的组件树中创建 useState, 并将 State 和 setState 作为 props 传递给子组件,setState 将作为函数传递,因此您可以在孙子组件或任何其他组件上调用它

【讨论】:

以上是关于在 React 中将数据从孙子传递给父母的主要内容,如果未能解决你的问题,请参考以下文章

将道具从孙子传递给父母

React context api,将数据从孩子传递给父母

在 React TS 中将道具传递给孩子时出错

将数据从孩子传递给祖父母

在 React 中将数据从父级传递给子级

将数据从孩子传递给父母,而无需加载事件,这可能在 vue 世界上吗?