hooks
hooks copied to clipboard
react 18 useEffect 执行两次的问题
在react 18中开启严格模式,useEffect 会被执行两次,同样useMount之类也会执行两次,这是一次破坏性更新,不是bug,但是确实会出问题,ahook是否有计划提供在react18 严格模式优雅的 useEffect 方案
https://github.com/reactwg/react-18/discussions/19
正在改造中,但是严格模式 useEffect/useMount 执行两次是不可避免的。
正在改造中,但是严格模式 useEffect/useMount 执行两次是不可避免的。
useEffect 不能把它当作生命周期来看。
但是 useMount 的定位是把它是等价成 componentDidMount 来做的吧。
const useMount = (fn: VoidFunction) => {
const didMoment = useRef(false)
useEffect(() => {
if (didMoment.current === true) return
didMoment.current = true
fn?.()
}, [])
}
那这样改是不是可以避免两次执行。
正在改造中,但是严格模式 useEffect/useMount 执行两次是不可避免的。
useEffect 不能把它当作生命周期来看。
但是 useMount 的定位是把它是等价成 componentDidMount 来做的吧。
const useMount = (fn: VoidFunction) => { const didMoment = useRef(false) useEffect(() => { if (didMoment.current === true) return didMoment.current = true fn?.() }, []) }
那这样改是不是可以避免两次执行。
这是 react 的规则,我们不应该去破坏。
这是 react 的规则,我们不应该去破坏。
但我理解,useMount就只应该执行一次,这和react的规则无关。 只是要在react的规则下,实现一个useMount。
这是 react 的规则,我们不应该去破坏。
但我理解,useMount就只应该执行一次,这和react的规则无关。 只是要在react的规则下,实现一个useMount。
为啥 useMount 就应该只执行一次呢,componentDidMount 也会执行两次