根据React的定义,我们在一个组件中定义state时,通常使用useState来定义。那么我可以不用useState吗?看下面一个情况,

    1. export default function App() {
    2. const obj = { name: 1 };
    3. const [num, setNum] = useState(0);
    4. useEffect(() => {
    5. setNum(num + 1)
    6. }, [obj]);
    7. return <div className="App">{num}</div>;
    8. }

    在页面上打印的情况是无限重复打印num的值,说明组件再无限重复渲染。
    Why?
    很显然每当执行setNum时都会触发组件重新渲染,即App function重新执行,那么obj对象又将重新创建一次,而useEffect中的deps数组监测到obj的变动,再次执行副作用回调,周而复始。使用useState就不会有这种事情,因为useState会比较该值是否变动来决定是否创建一个新对象。

    所以说,为了避免这种情况,还是能用useState就用useState吧。