reactjs - 获取 React 组件内部的调用深度
问题描述
我正在尝试在 React 中制作一个支持嵌套组件的场景图。类似于以下内容:
<SceneNode>
<SceneNode>
<Thing/>
</SceneNode>
<SceneNode>
<Thing/>
</SceneNode>
</SceneNode>
当SceneNode
安装 a 时,我需要一种方法让它知道它的“深度”。组件中是否有访问该信息的方法?例如:
function SceneNode({children}:{children:ReactNode}) {
const depth = useCallDepth(); // <- some magic function that lets me know the level of nesting for this node
return <div>{children}</div>
}
注意:我尝试了以下方法:
- 上下文:如果不让每个节点创建自己的上下文,就无法让它工作,但是由于在 React 中静态引用了上下文,我无法从子节点访问动态创建的父上下文。
- Refs:组件的嵌套应该反映在它们产生的 DOM 元素中,但我不知道如何确定给定 DOM 元素的关联组件是什么 - 即这个 div a
SceneNode
还是只是一个随机 div?(我想我可以将它编码为一个属性或 id,但我希望有一些更清洁和更少侵入性的东西) - 手动:我可以手动指定哪些节点是父节点(例如
<SceneNode parent={true}/>
,但这很容易出错。
解决方案
可以为此使用上下文:Demo
推荐阅读
- javascript - 元素类型无效,使用 Flatlist 时
- multithreading - 在多个读者从 Rust 中的不同线程读取时写入
- javascript - 如何动态选择flex的属性来设置值?
- java - Android RecyclerView 项目点击不起作用 - MVVM
- scala - 如何从 spark scala 调用 db2 数据库中的存储过程
- python - 从数据框的代码中存储分类
- javascript - 循环 - 从数组中删除元素
- php - PHP搜索页面返回错误但搜索功能有效
- html - 如何在 html、css 中插入全屏大背景图片?
- c++ - 难以理解这段代码