useMemo使用示例

参考学习视频

这东西 和 vue 的 watch 差不多

useMemo 和 useEffect区别

相同点

两者在写法上有很大的相同之处 useMemo第一个参数需要返回一个函数,useEffect也可以返回一个函数 两者第二参数都可以放一个数组,里边的元素有着浅比较触发函数的作用

不同点

useMemo是dom更新前触发的,useuseEffect是dom更新后触发的 useMemo主要能和useCallback联合使用,利用其浅比较的能力和useCallback缓存函数的作用一起封装组件,见另一篇文章 useEffect主要用来模拟生命周期

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import React, { useMemo, useReducer } from 'react'

const Table = (props)=> {
  return (
    <div>
      table: current = {props?.page}
    </div>
  )
}
const Pagination = (props) => {
  let pags = [1,2,3]
  let clicked = props.callback||props.dispatch

  let page = props.page||1
  useMemo(()=>{
    console.log('memo, page=',page)
  },[page])
  return (
    <div>
      pagination : 
      {
        pags.map(cur => {
          return (
            <button key={cur} onClick={()=>clicked && clicked({
              page:cur
            })} >{cur}</button>
          )
        })
      }
      
      
      ; 当前页数 = {page}
    </div>
  )
}

export default function ReducerDemo() {

  const [page ,setPage ] = useReducer((state,payload) => {
    console.log(state,payload)
    return payload.page||state
  },1)

  
  return (
    <div>
      <Table page={page} />
      <Pagination dispatch={setPage} page={page} />
        
    </div>
  )

}