解决的问题

1.React hooks产生的无用渲染的性能问题,用useMemo来做缓存

2.支持多个useState链式调用,一个变量的改变,带动另一个变量发生改变,类似vue的compute

区别

useState 主动让一个state变量改变,带动组件涉及到的部分渲染,但是无法实现多个useState链式调用。

useEffect,一个state变量的改变,带动组件整体渲染。

怎么用

下面的例子,当input发生改变,根据input的改变值,取匹配多个值并且返回。

useMemo(fn, arr)第一个参数为函数。第二个参数为依赖项,并且其值发生改变,才会多次执行执行,否则只执行一次,如果为空数组[],fn只执行一次。

  1. import React, {useState, useMemo} from 'react'
  2. export default function UseMemoTest() {
  3. const [text, setText] = useState('')
  4. const [data, setData] = useState([
  5. {id: 1, name: 'test1111'},
  6. {id: 2, name: 'test222'},
  7. {id: 3, name: 'test334'},
  8. {id: 4, name: 'test444'},
  9. ])
  10. const handleChange = (e) => {
  11. setText(e.target.value);
  12. }
  13. const getList = useMemo(() => {
  14. return data.filter(item => {
  15. if(item.name.includes(text)) {
  16. return item
  17. }
  18. });
  19. }, [text]);
  20. return (
  21. <div style={{marginTop: 20}}>
  22. <input type="text" onChange={(e) => handleChange(e)}/>
  23. {
  24. getList.map(item => <div key={item.id}>{item.name}</div>)
  25. }
  26. </div>
  27. )
  28. }