三更 發表於 2020-4-7 20:00:00

react性能优化之useMemo,useCallback的使用

<div class="cnblogs_Highlighter">
<pre class="brush:javascript;gutter:true;">//useMemo,useCallback
import React, { memo, useMemo, useCallback, useState } from 'react';
// import About from './About';

const Foo = memo((props) =&gt; {
let count = props.count;
console.log("函数重新渲染");
return &lt;div onClick={props.addCount}&gt;count:{count}&lt;/div&gt;
});

// class App extends PureComponent {
//   state = {
//   count: 0,
//   name: 0
//   }
//   render() {
//   return (
//       &lt;Fragment&gt;
//         &lt;Foo count={this.state.count} &gt;&lt;/Foo&gt;
//         &lt;button onClick={() =&gt; { this.setState(() =&gt; ({ count: this.state.count + 1 })) }}&gt;加count&lt;/button&gt;
//       &lt;/Fragment&gt;
//   )
//   }
// }
const App = memo(() =&gt; {
const = useState(0);
let double = useMemo(() =&gt; {
    return count * 2
}, );
let addCount=useCallback(()=&gt;{    //useCallback 可以看成useMemo返回函数时的简写,赋值给onClick 不会引发函数重新渲染
    setCount((count) =&gt; count + 1)
},[]);//括号可以看成依赖数组,当为空时,只有第一次挂载时才会渲染,当有数据时如,当count改变时才会改变,有多个数据时,所有数据改变时才会改变
// const addCount=()=&gt;{
//   setCount((count) =&gt; count + 1)
// }
return (
    &lt;div&gt;
      &lt;Foo addCount={addCount} count={double}&gt;&lt;/Foo&gt;   //防止传入函数会重复渲染,可以用上面的useMemo()或者它的简易实现useCallback 返回一个函数,节省性能
      &lt;button onClick={()=&gt;{setCount((count) =&gt; count + 1)}}&gt;count+1&lt;/button&gt;   //直接赋值当数据改变时,这个函数会重复渲染浪费性能<br>   &lt;/div&gt;
)
})
export default App;
</pre>
</div>
<p>  </p><br><br>
来源:https://www.cnblogs.com/uimeigui/p/12655619.html
頁: [1]
查看完整版本: react性能优化之useMemo,useCallback的使用