Please enable JavaScript.
Coggle requires JavaScript to display documents.
react高级指导 (关于与Dom结合 (深入JSX (特点 (react必须在作用域中, 在jsx类型中使用点语法, 3…
react高级指导
关于与Dom结合
深入JSX
实质:JSX仅仅是React.createElement(component, props, ...children)函数的语法糖
-
-
-
-
-
-
性能优化
代码分割
使用方法
-
react.Lazy
lazy目前只支持默认导出(default export),如果想把被引入的模块命名导出。 可以创建一个中间模块来重新导出为默认模块,可以保证tree shaking不会出错,而且不必引入不需要的组件
-
-
-
-
错误边界
-
作用:错误边界是一种 React 组件,这种组件可以捕获并打印发生在其子组件树任何位置的 JavaScript 错误,并且,它会渲染出备用 UI,而不是渲染那些崩溃了的子组件树。错误边界在渲染期间、生命周期方法和整个组件树的构造函数中捕获错误。为了解决部分ui的js错误引起应用崩溃。
使用方法
制作一个包裹错误的组件,使用组合模式,把内部的组件当成子组件,当没有错的时候渲染,而当出现错误的时候,在生命周期函数中更改状态使得页面报错,如果没有出现错误,则渲染子组件。
-
性能优化
-
方式
-
-
-
大部分情况下,你可以使用 React.PureComponent 来代替手写 shouldComponentUpdate。但它只进行浅比较,所以当 props 或者 state 某种程度是可变的话,浅比较会有遗漏,那你就不能使用它了
-
-
-
功能
Context
-
api
-
-
Class.contextType
挂载在 class 上的 contextType 属性会被重赋值为一个由 React.createContext() 创建的 Context 对象。这能让你使用 this.context 来消费最近 Context 上的那个值。你可以在任何生命周期中访问到它,包括 render 函数中。
-
-
-
-
-
高级组件模式
-
Render Props?
-
-
实现方式:<Mouse render={mouse => (<Cat mouse={mouse} />}/>,相当于将mouse的state注入到Cat组件中,这样Cat可以随意调用Mouse中State中的属性。
注意事项:将 Render Props 与 React.PureComponent 一起使用时要小心,会抵消.PureComponent 的效果,所有可以采用自定义一个renderxxx的方法代替原来的render
原理
协调
Diffing 算法
-
-
比对同类型的组件元素
当一个组件更新时,组件实例保持不变,这样 state 在跨越不同的渲染时保持一致。React 将更新该组件实例的 props 以跟最新的元素保持一致,并且调用该实例的 componentWillReceiveProps() 和 componentWillUpdate() 方法。
-
权衡
-
性能损耗的情况
- 该算法不会尝试匹配不同组件类型的子树。如果你发现你在两种不同类型的组件中切换,但输出非常相似的内容,建议把它们改成同一类型。在实践中,我们没有遇到这类问题
- Key 应该具有稳定,可预测,以及列表内唯一的特质。不稳定的 key(比如通过 Math.random() 生成的)会导致许多组件实例和 DOM 节点被不必要地重新创建,这可能导致性能下降和子组件中的状态丢失