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,我仍然不明白“如果你只想避免一些道具通过多个级别,组件合成通常是比上下文更简单的解决方案。”如何“组件合成”自助避免道具弄脏?