博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
React Hooks ---useMemo
阅读量:5891 次
发布时间:2019-06-19

本文共 1315 字,大约阅读时间需要 4 分钟。

useMemo

下面我们通过一个实例,来理解下 useMemo的用法。

  • 父组件
function App() {  const [name, setName] = useState('名称')  const [content,setContent] = useState('内容')  return (      <>                                )}复制代码
  • 子组件
function Button({ name, children }) {  function changeName(name) {    console.log('11')    return name + '改变name的方法'  }  const otherName =  changeName(name)  return (      <>        
{otherName}
{children}
)}复制代码

熟悉react的同学可以很显然的看出,当我们点击父组件的按钮的时候,子组件的name和children都会发生变化。

注意我们打印console.log的方法。

不管我们是改变name或者content的值,我们发现 changeName的方法都会被调用。 是不是意味着 我们本来只想修改content的值,但是由于name并没有发生变化,所以无需执行对应的changeName方法。但是发现他却执行了。 这是不是就意味着性能的损耗,做了无用功。

下面我们使用useMemo进行优化

  • 优化之后的子组件
function Button({ name, children }) {  function changeName(name) {    console.log('11')    return name + '改变name的方法'  }const otherName =  useMemo(()=>changeName(name),[name])  return (      <>        
{otherName}
{children}
)}export default Button复制代码

这个时候我们点击 改变content值的按钮,发现changeName 并没有被调用。 但是点击改变name值按钮的时候,changeName被调用了。

结语

所以我们可以使用useMemo方法,避免无用方法的调用,当然一般我们changName里面可能会使用useState来改变state的值,那是不是就避免了组件的二次渲染,达到了优化性能的目的。

转载于:https://juejin.im/post/5c9d7968f265da610b3a2153

你可能感兴趣的文章
HDU 1425 ( sort )
查看>>
Windows Phone 7 框架和页面
查看>>
Directx11教程(31) 纹理映射(1)
查看>>
Android——Button的颜色
查看>>
《星辰傀儡线》人物续:“灭世者”、“疯狂者”、“叛逆者”三兄妹
查看>>
安装系统字体
查看>>
Spring的ApplicationContext加载备忘
查看>>
GoogleMapAPIV3.8.6离线包下载
查看>>
SILK 的 Tilt的意思
查看>>
Html学习笔记3
查看>>
批处理学习笔记8 - 深入学习For命令1
查看>>
Object-c学习之路二(oc内存管理黄金法则1)
查看>>
python开发_python文件操作
查看>>
iPhone 已停用
查看>>
CSS3之边框图片border-image
查看>>
图片轮换cycle插件的运用
查看>>
【Oracle】两个表Join关联更新
查看>>
ActiveX控件的安全初始化和脚本操作 和 数字签名SIGN
查看>>
Eclipse console文本换行
查看>>
微信支付开发(11) Native支付
查看>>