【发布时间】:2021-05-11 04:27:41
【问题描述】:
如果作为一个思想实验,我要为 JSX 编写自己的 createElement 实现,那么支持 implicit context 会是什么样子?
特别是,我无法弄清楚 JSX 的 createElement 签名的有限手段如何使不同子树的上下文独立。 (看起来 React 的上下文处理在最近的版本中变得更加精细;我最感兴趣的是 earlier versions 看似更直接的机制。)
这可能用于automatically determine heading levels,例如:
<Section title="Hello World">
<Card title="Details" />
</Section>
<Card title="Example" />
这里Card 会自动生成<h3> 和<h2>,分别依赖于context.headingLevel 之类的东西。
【问题讨论】:
-
我真的很想回答这个问题,但不确定您期望的答案是什么,首先,您询问可能的实现,为每个组件设置诸如嵌套级别之类的元数据就可以了。你也问context是如何独立的,但是和createElement没有关系,想想你可以用HOC实现context,所以基本上可以将context值注入到所有子树中。
-
至少旧版本的 React(显然是<16.3.0)设法为所有组件提供
context,而组件作者没有明确选择 - 所以我想知道他们是如何管理的。当然,答案必须在createElement的(无状态?)实现中,因为这就是 JSX 所允许的全部?