react - 初识hoos - useMemo和 useCallback


hooks 中在也不需要this的概念了,并且必须放到函数组件内部最外层 最上面

引入 useMemo 和 useCallback

import React, { useMemo, useCallback } from "react";

useMemo

先看一个例子:

useMemo(() => {

    return count;

  },[count]);

 useMemo(params) 设置 第一个参数是函数

count是第二个参数 是 追踪变化的值

正常情况下 只要在当前组件组件 数据状态发生变化 当前的内部所有的逻辑 都会重新计算 并且 render一遍

比如:

const [value,setValue] = useState(''");

const [value2,setValue2] = useState(''");

const handleChange = (e) => {

setValue(e.target.value)

}

const c= () => {

return 456;

}

<div>{c()} </div>

<input type="text" value={value} onChange={(e) => handleChange(e)} />

<button onClick={() => setValue2(math.random())}></button>

一般setValue和setValue2  只要有一方点击 c函数 都会执行

这样就浪费了性能 我们只想在input值改变的时候 执行c函数 所以我们可以使用useMemo

 hook

const [value,setValue] = useState(''");

const [value2,setValue2] = useState(''");

const handleChange = (e) => {

setValue(e.target.value)

}

const c= useMemo (() => {

return 456;

},[value])

<div>{c()} </div> 

<input type="text" value={value} onChange={(e) => handleChange(e)} />

 <button onClick={() => setValue2(math.random())}></button>

这样 是有value值改变的时候 才会执行 c函数


useCallback

useMemo和useCallback 唯一区别是

useMemo 是 内部返回的是一个值

useCallback 是 内部返回的是一个当前函数

例如:

useMemo(() => {

return '2'

})


useMemo 返回的是 2;

useCallback 返回的是 () => {

return '2'

}


所以一般时候 useCallback 可以当做是class组件的shouldComponentUpdate

以下是我的demo

父组件

子组件


父组件





有写错的地方,欢迎指正,不胜感激!

笔者QQ群:148042812

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Hook 是 React 16.8 的新增特性。它可以让你在不编写 class 的情况下使用 state 以及其他...
    孤独的小色狼阅读 370评论 0 0
  • React 生命周期很多人都了解,但通常我们所了解的都是单个组件的生命周期,但针对Hooks 组件、多个关联组件(...
    前端js阅读 7,089评论 3 7
  • 长久以来,面向对象在 JavaScript 编程范式中占据着主导地位。不过,最近人们对函数式编程的兴趣正在增长。函...
    神刀阅读 484评论 0 0
  • "use strict";function _classCallCheck(e,t){if(!(e instanc...
    久些阅读 2,054评论 0 2
  • Hooks是 React v16.8 的新特性,可以在不使用类组件的情况下,使用 state 以及其他的React...
    hellomyshadow阅读 13,472评论 0 5