一个 React 组件结构
const App = () => (
<A>
<B>
<C />
</B>
</A>
);
A B C 3 个组件,都有自己内部的 state。
根据我们对 React 的了解,如果 C 更新,绝对不会影响到 A。
那如果是A 更新呢?会引起 C更新吗?答案是:不会。
父组件?
根据我们对 React 的了解:
父组件更新将触发子组件更新。
在这里,我们很容易把 A 称为 C 的父组件。但其实,A 不是 C 的父组件。
父组件 应该是直接使用 <C /> 的组件,看上文结构,App 才是 C 的父组件。
写成这样的话更直观一点:
const App = () => (
<A children={<B children={<C />} />} />
);
A 中包含的内容(children),只是父组件(App)传给他的 props 而已,A 不可能是 props 的父组件。
A、C 是独立的,它们只是结构上嵌套,但逻辑上没什么依赖。
A 如何触发 C 更新?
只有 A 内部直接使用 <C /> 的时候,比如:
const A = () => (
<B>
<C />
</B>
);
const App = () => (
<A />
);
这样 A 才是 C 的父组件,A 更新才能触发 C 更新。
我是不是在哪见过?
是的,在《Before You memo()》这里:
组件结构上的嵌套,是依赖 children 这根"电线"来实现的。
children 是个占位符,代表了所处位置,但它本身只是传入组件的一个 js 数据。
这是不是挺绕的?
这确实挺特么绕的。
但只需要记住:A 不是 C 的父组件,App 才是父组件!