💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
[toc] ## React组件优化 ### 属性传递优化 传递参数的时候要少传,并且公用一份数据 ![](https://box.kancloud.cn/2668babae85c697ed71bc7833b5ef518_497x170.png) 或则直接使用 ``` //类中 handleClick=()=>{ } ``` 不仅绑定事件是这样,一般的属性传递也要注意 ![](https://box.kancloud.cn/da6b5668ab90aef9ff8427a86e43b2db_656x252.png) 可以放在构造函数里(只会生成一次) 另外属性往下传递时,传递需要的部分,不要整个就往下传了。 ### 多组件优化 只要父组件重新渲染,子组件也会重新渲染 ![](https://box.kancloud.cn/9719527132e6fbae6182863638a162f0_588x341.png) #### shouldComponentUpdate So,这种情况就轮到我们的`shouldComponent`登场了 ##### immutable 在shouldComponetUpdate中如果我们要比较的是两个层级比较深的对象,会很难操作的,需要递归比较。 我们不能直接obj1==obj2这样比较,因为如果我们改变obj1是通过obj1.xx这样改变的,那么obj2仍然是obj1的地址,这样判断就不会放行渲染了,纵然内容已经改变。 而如果我们的obj1是被替换成一个新的obj2,这样虽然不会存在地址相同的问题,但可能他们的内容又是相同的, 故,这就轮到`immutable.js`登场了 - Map 类似于对象 - List 有序可重复的列表 类似于数组 - 无需不可重复的 类似于es6 的set #### PureComponent 如果只是`props`(非对象)没有`state`的情况,我们可以让子组件继承`PureComponent`,会自动在shouldComponent触发时比较新旧`props` ### key 不要用索引作为key 因为如果一个数组`[1,2,3,4]`,你把第一项干掉,后面的项的索引都会往前移,但其实它们的内容并没有改变 ## Redux 性能优化 ### reselect ![](https://box.kancloud.cn/cb793de4712e0bd68cec1ac94294f5d2_526x541.png) 第一个参数也可以是一个数组 ![](https://box.kancloud.cn/18ccdcd48eb6af7eed4d68f191fad9a0_513x340.png) ## chrome性能检测 首先在url末尾添加`react_perf` ![](https://box.kancloud.cn/8e60843fe29f5c75bff47677d8f9a3b0_227x31.png) 接着点开`Performance`,点击`record`进行检测 ![](https://box.kancloud.cn/d44dbf72662005d5503d114d489d8dda_515x394.png) 选中要查看的节点 点开UserTiming ![](https://box.kancloud.cn/52c7abe2e4248ecc275627ba30944cfd_657x284.png)