无障碍
语义化: 提升可访问性(更多人使用网站),其一帮助残障人士使用。
WAI-ARIA : 不影响原网站,暴露更多信息给无障碍API。
….可待补充
代码分割
懒加载: 用户只加载需要的代码.
配置webpack按照import语法进行分割,配置Bable避免将import转换,而是动态解析。
React.lazy: 需要在Suspense组件中渲染,并提供加载过程展示组件。但需单独文件进行导出命名。
基于路由分割: 使用React Router
Context
跨层共享,主题、地区偏好设置。
组件复用性将变差。
多个消费组件可使用同一个Provider, 多个Provider里层覆盖外层。
provider值更新,consumer也会五十shouldComponentUpdate进行更新。
消费者组件A使用 A.contextType = context, 在A内部this.context 取到最近的Provider的值,也可以直接context.Consumer获取
provider也需要提供方法对自身数据进行操作给消费组件。
provider的值需要存放到state当中,避免自身重新渲染影响到消费组件的意外更新。
错误边界
捕捉子树错误的组件,展示降级UI。
需要定义componentDidCatch() 或者 static getDerivedStateFromError()
任何未被错误边界捕获的错误将导致整个 React 组件树被卸载, 且无法捕捉事件处理器内部错误
Ref转发
常规函数class都不接受ref作为参数
本身属于React特殊处理的key,经由高级组件转发时,需要使用React.forwardRef,否则会导致指向最外层的容器而非包裹组件。
….可待补充
Fragments
包裹多个元素但不生成实际DOM
唯一属性只有key(短语法则不支持),未来会拓展
高级组件HOC
mixin 已经被弃用
HOC是纯函数,接受组件返回新组件,没有副作用。多余的属性需要透传。
不要修改子组件,不要在render中使用HOC,不能传递ref作为属性
可以使用hoist-non-react-statics将手动添加的static方法进行拷贝
….可待补充
与第三方库协同
避免React更新DOM,给其他库空div供起操纵
….可待补充
JSX深入
字符串字面量赋值给 prop 时,它的值是未转义
… 传递其余props
去除首位空行,文字间新行被压缩为一个空格
0 在条件判断中会被React看作true
性能优化
shouldComponentUpdate 覆盖生命周期进行提速,也可返回false跳过生命周期的渲染。
React.PureComponent自动在shouldComponentUpdate实现了props和state的浅比较
Portals
将子节点渲染到父节点外
事件冒泡 context与普通组件无异,因为React树的结构并没有发生变化,只是DOM树的位置改变了
Profiler
测量组件的渲染时间
需要ID 和 render函数,在组件树提交更新时触发render
增加开支,慎重使用,生产禁用。
协调
Diffing算法 和 Key值
….可待补充
Refs&DOM
函数组件没有实例,不能直接使用ref,需要结合forwardRef(useImperativeHandle)进行使用
通常不要父组件使用子组件的DOM节点
findDOMNode可用于找到原生DOM,只可用在已挂载组件,且不能用于函数组件,并慎用。
回调ref:给元素的ref属性赋予一个函数,该函数参数为该元素,如果为内联函数(即定义在render的函数),会在组件更新阶段触发两次,第一次传入null,第二次传入element
Render Props
props的render,接受渲染函数,而不进行自己的渲染。
将组件state内容分享给其它组件。
可以实现高阶HOC
render props 与纯组件使用注意:父组件的render会使纯组件render props浅对比为false,因此生成新的函数,可以定义静态方法。
无法定义静态方法时,你需要关闭组件的 props 和/或 state?
严格模式
识别不安全生命周期 + 检测意外副作用 + 检测过时语法
….可待补充
PropTypes
组件props的定义限制
可限制只有一个元素
defaultProps: 定义默认值
Web Component
与React目的不一致,可单独使用也可结合使用
在React组件当中使用Web Component最好包装成组件形式,手动处理React不会渲染的逻辑
