Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 了解如何避免在ReactJS中通过多个级别的组件层次结构传递道具_Javascript_Reactjs_React Context - Fatal编程技术网

Javascript 了解如何避免在ReactJS中通过多个级别的组件层次结构传递道具

Javascript 了解如何避免在ReactJS中通过多个级别的组件层次结构传递道具,javascript,reactjs,react-context,Javascript,Reactjs,React Context,我正在看医生。在会议上,我遇到了以下情况: 如果您只想避免在多个级别传递一些道具,那么组件组合通常比上下文更简单。 例如,考虑一个页面< /Cult>组件,它通过了用户< />代码> AvaTraceSuth[/Cuff],支持几个级别,以便深嵌套链接< /代码>和化身< /代码>组件可以读取: <Page user={user} avatarSize={avatarSize} /> // ... which renders ... <PageLayout user={use

我正在看医生。在会议上,我遇到了以下情况:

如果您只想避免在多个级别传递一些道具,那么组件组合通常比上下文更简单。
例如,考虑一个<代码>页面< /Cult>组件,它通过了<代码>用户< />代码> <代码> AvaTraceSuth[/Cuff],支持几个级别,以便深嵌套<代码>链接< /代码>和<代码>化身< /代码>组件可以读取:

<Page user={user} avatarSize={avatarSize} />
// ... which renders ...
<PageLayout user={user} avatarSize={avatarSize} />
// ... which renders ...
<NavigationBar user={user} avatarSize={avatarSize} />
// ... which renders ...
<Link href={user.permalink}>
  <Avatar user={user} size={avatarSize} />
</Link>

// ... 这使得。。。
// ... 这使得。。。
// ... 这使得。。。

在上面的代码中,我们仍然将
user
avatarSize
作为道具传递,对吗?那么,它是如何允许“避免通过许多层次传递一些道具”的,正如上面引用的第一句话所述?

您引用的代码来自文档的“问题”部分。该代码并不意味着解决方案,它显示了支柱钻井的问题

向下滚动显示如何使用组件组合解决问题

成分组合:

function Page(props) {
  const user = props.user;
  const userLink = (
    <Link href={user.permalink}>
      <Avatar user={user} size={props.avatarSize} />
    </Link>
  );
  return <PageLayout userLink={userLink} />;
}

// Now, we have:
<Page user={user} avatarSize={avatarSize} />
// ... which renders ...
<PageLayout userLink={...} />
// ... which renders ...
<NavigationBar userLink={...} />
// ... which renders ...
{props.userLink}
功能页面(道具){
const user=props.user;
常量用户链接=(
);
返回;
}
//现在,我们有:
// ... 这使得。。。
// ... 这使得。。。
// ... 这使得。。。
{props.userLink}

支柱钻井的解决方案是我们可以使用上下文api。上下文提供了一种在组件之间共享类似值的方法,而无需显式地在树的每一层传递一个道具。

您可以查看官方文件的详细信息

这是一个道具钻孔的示例,您将道具传递给每个子组件。在同一页上向下滚动,看看上下文如何解决这个问题以及如何实现它。这是否回答了我的问题?本页是否给出了这个例子来说明如何“避免向每个孩子传递道具”(引用的第一句话)?或者我理解错了?你问题中提供的代码就是“问题代码”。如果您继续阅读解释上下文的页面,它会显示如何以各种方式修复此问题。请参阅,道具钻孔是不好的,因为当您将道具向下传递到树上,并且更高的组件更新道具时,它会导致所有子级重新渲染,即使子级不使用道具。在您共享的代码中,解决此问题的一种方法是,将整个组件作为prop@boxdoxTBH,我仍然不明白“如果你只是想避免在很多层次上传递一些道具,组件组合通常比上下文更简单。”如何“组件组合”这是一种自我帮助,可以避免道具弄脏?他们指出,这仍然不理想。你基本上把道具装箱,然后把箱子钻成一个整体,这基本上是同一个问题。TBH,我仍然不明白“如果你只想避免一些道具通过多个级别,组件合成通常是比上下文更简单的解决方案。”如何“组件合成”自助避免道具弄脏?