主要观点:介绍了 React 编译器相关内容,包括记忆 props(memo the props)、类型推断(type inference)、是否记忆 props 以及对 React 进行类型标注(typing React)等方面。
关键信息:
- React 中使用
React.memo
包裹的组件仅在 props 改变时重新渲染,通过浅比较判断 props 是否变化。 - 介绍了 Hindley Milner 类型系统及 React 编译器中的类型推断算法 W,包括初始化类型变量、生成类型方程、求解方程等步骤。
- 对于
Price
组件,编译器可推断出所有值为原始类型,无需对total
等进行记忆,可节省包大小和内存。 - 有了类型系统后,可用于进行各种其他分析,如为 React 规则添加验证。
重要细节: - 在 JavaScript 中,对象需保持身份以进行浅比较,而原始值可直接比较。
- 类型推断过程中类型会流回定义处,如通过
calculateSubTotal
的使用推断出其返回类型为原始类型。 - 类型推断可能带来“远距作用”行为,Flow 为此采用了局部类型推断。
- 可通过添加类型系统为 React 规则添加验证,如对
useState
的使用进行验证。
进一步阅读可参考 Hindley Milner 类型系统相关论文和其他标签的帖子。之前有关于“Compiler Theory and Reactivity”的博客。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。