根据React的定义,我们在一个组件中定义state时,通常使用useState来定义。那么我可以不用useState吗?看下面一个情况,
export default function App() {const obj = { name: 1 };const [num, setNum] = useState(0);useEffect(() => {setNum(num + 1)}, [obj]);return <div className="App">{num}</div>;}
在页面上打印的情况是无限重复打印num的值,说明组件再无限重复渲染。
Why?
很显然每当执行setNum时都会触发组件重新渲染,即App function重新执行,那么obj对象又将重新创建一次,而useEffect中的deps数组监测到obj的变动,再次执行副作用回调,周而复始。使用useState就不会有这种事情,因为useState会比较该值是否变动来决定是否创建一个新对象。
所以说,为了避免这种情况,还是能用useState就用useState吧。
