先说结论
useCallback、useMemo、memo、shouldUpdate,性能优化的API,不出性能问题你是不该使用的,盲目的使用会造成负优化,甚至还会造成延迟闭包的bug,这个结论是共识。
可是这个只是一方面, 我主要想切题地讲一讲,除了这些API,React真正减少rerender的思路
React的粗粒度,可能伤及无辜,罪魁祸首 —— jsx的灵活让props难以区分变与不变
App是一个组件,Box是一个子组件
const App = ()=>{ return <Box h="200px" w="200px" {/*.....*/}>hello</Box>
}
// jsx 编译后
const App = ()=>{ return /*#__PURE__*/ React.createElement(Box, { h: "200px", w: "200px" }, "hello");
};
React采用的策略是全等比较,props比了第一回的{ h: "200px", w: "200px" }
和第二回的{ h: "200px", w: "200px" }
,虽然看似相等,但是function每次都创建了新的object类型,地址不同,照样渲染,即使是空对象也没辙,也如泄洪一般,从脑袋顶一直渲染到脚底板。Box是会被渲染的
const