useState set一样的值会重新渲染吗?

43 阅读2分钟

被问到这个问题,首先直觉肯定是不会啊。可仔细一想,什么才算一样的值呢?熟读文档的你,可能马上就有了答案,由 Object.is 比较确定,不同则会重新渲染。

image.png 可现实真的如此吗?我就是为了复述一下文档而水一篇文章?
请看下方代码,当第一次点击set 2按钮,count由0变为2,组件重新渲染,符合文档。
当第二次点击set 2按钮,count已经是2了,再设置为2,应该就不会渲染了。
错,实践是检验真理的唯一标准。
当第二次点击set 2按钮时,组件被重新渲染了。。。不符合文档了。。
那么点击第三次呢? 什么?又不会重新渲染了。。。又符合文档了。

这会是一个BUG吗?请机灵又聪明的各位朋友评论区谈谈你们的见解。

import { useEffect, useState } from "react";

import "./App.css";

function App() {
  const [count, setCount] = useState(0);
  useEffect(() => {
    console.log("count changed", count);
  }, [count]);
  console.log("rendered", count);
  console.log("count is 2", Object.is(count, 2));
  return (
    <>
      <div>
        <button onClick={() => setCount((count) => count + 1)}>
          count is {count}
        </button>
        <button
          onClick={() => {
            console.log("setCount", count);
            setCount(2);
          }}
        >
          set 2
        </button>
      </div>
    </>
  );
}

export default App;

支持一下

本人正在找工作,如在长三角有合适岗位,请联系我

热情地欢迎各位兄弟姐妹的大力支持!
github: github.com/leafio?tab=…
期待至少一个项目能达成1000个star
期待至少一个npm能达成每周1000次下载