React · 单选题 · 第 40 题
前端与全栈开发面试 · 第 40 题
useEffect 的依赖数组写成 [] 时,副作用的执行时机是?
- A组件挂载后执行一次;开发环境的严格模式下会额外模拟一次卸载再挂载
- B每次组件渲染之后都会执行一次,依赖数组为空不会产生任何的影响
- C组件渲染到 DOM 之前同步执行,会阻塞浏览器把页面绘制到屏幕上
- D永远都不会执行,因为没有任何依赖发生变化也就不会触发这个副作用
答案
A A. 组件挂载后执行一次;开发环境的严格模式下会额外模拟一次卸载再挂载
解析
空依赖表示副作用不依赖任何 props 或 state,只在挂载时运行,返回的清理函数在卸载时执行。React 18 起严格模式在开发环境会故意挂载、卸载、再挂载一次,用来暴露没写清理逻辑的副作用,生产环境不会这样。不传依赖数组才是每次渲染后都执行;需要在绘制前同步执行的场景用 useLayoutEffect。