在 React 的项目中我们经常会使用 useEffect 这个hook 去处理组件中的 SideEffect,为确保的组件在每次渲染时都得到同样的数据,React 在开发模式下会对每个 useEffect 函数执行2 次。这种情况如果我们没有正确清除 useEffect 带来的 SideEffect 的话就会形成一种相互竞争 或者 Race Condition。比如下面的例子:
const Com = ({timeout, text}) => {
const ref = useRef()
useEffect(() => {
setTimeout(() => {
ref.textContent = text;
}, timeout)
}, [timeout])
return (<div ref={ref}/>)
}
当父级组件传入不同的值 3000, 3000ms 和 2000,