hooks怎么获取上一轮的state和props

3,616 阅读1分钟

hooks中通过useRef和useEffect获取上一轮的props和state

看一下官方文档对useRef的描述

useRef

在这里插入图片描述 当ref对象内容发生变化时,是不会引发组件重新渲染的;

再看一下useEffect的执行实际 在这里插入图片描述 他会在浏览器完成布局与绘制之后,在一个延迟时间中被调用. 结合useRef和useEffect,我们就能够获取到上一次的props和state;

function PrevState() {
  const [count, setCount] = React.useState(0);

  const prevCountRef = React.useRef();
  React.useEffect(() => {
    prevCountRef.current = count;
  });
  const handleClick = () => {
    setCount(count+1)
  }
  return (
    <>
      <button onClick={handleClick}>+1</button>
      <h1>Now: {count}, before: {prevCountRef.current}</h1>
    </>
  )
}

最初渲染过程: count =0; 渲染页面: //Now: 0,before: 执行useEffect, prevCountRef.current=0;(因为ref对象内容变化不会引发组件重新渲染,所以prevCountRef.current的值变了, 页面依旧是: //Now: 0,before:)

当点击按钮 count +1 的时候, 出发handleClick函数,count +1; count 发生变化, 组件重新渲染; 页面: //Now: 1,before: 0 触发useEffect,prevCountRef.current= 1 ** ref对象发生变化,不会重新渲染;** 页面: //Now: 1,before: 0

以上;