memo
React.memo
爲高階組件。它與 React.PureComponent
很是類似,但它適用於函數組件,但不適用於 class
組件。html
const MyComponent = React.memo(function MyComponent(props) { /* 使用 props 渲染 */ });
若是你的函數組件在給定相同 props
的狀況下渲染相同的結果,那麼你能夠經過將其包裝在 React.memo
中調用,以此經過記憶組件渲染結果的方式來提升組件的性能表現。這意味着在這種狀況下,React
將跳過渲染組件的操做並直接複用最近一次渲染的結果。react
此方法僅做爲性能優化的方式而存在。但請不要依賴它來「阻止」渲染,由於這會產生 bug
。segmentfault
默認狀況下其只會對複雜對象作淺層對比,若是你想要控制對比過程,那麼請將自定義的比較函數經過第二個參數傳入來實現api
function MyComponent(props) { /* 使用 props 渲染 */ } function areEqual(prevProps, nextProps) { /* 若是把 nextProps 傳入 render 方法的返回結果與 將 prevProps 傳入 render 方法的返回結果一致則返回 true, 不然返回 false */ } export default React.memo(MyComponent, areEqual);
React.memo()
組件常常從新渲染,又是差很少的內容.純展現組件,渲染相同的props
,好比只是數字的更新,其餘無變化.數組
// Initial render <MovieViewsRealtime views={0} title="Forrest Gump" releaseDate="June 23, 1994" /> // After 1 second, views is 10 <MovieViewsRealtime views={10} title="Forrest Gump" releaseDate="June 23, 1994" /> // After 2 seconds, views is 25 <MovieViewsRealtime views={25} title="Forrest Gump" releaseDate="June 23, 1994" /> function MovieViewsRealtime({ title, releaseDate, views }) { return ( <div> <MemoizedMovie title={title} releaseDate={releaseDate} /> Movie views: {views} </div> ) } // etc
React.memo() and callback functions
這裏的 callback
指的是usecallback
react
新增的api
.還沒看到那一部分,暫時先 mark
一下性能優化
const MemoizedLogout = React.memo(Logout); function MyApp({ store, cookies }) { const onLogout = useCallback(() => cookies.clear(), [cookies]); return ( <div className="main"> <header> <MemoizedLogout username={store.username} onLogout={onLogout} /> </header> {store.content} </div> ); }
https://segmentfault.com/a/11...