【发布时间】:2019-11-21 16:17:45
【问题描述】:
我正在检查组件是否已卸载,以避免调用状态更新函数。
- 这是第一个选项,它有效
const ref = useRef(false)
useEffect(() => {
ref.current = true
return () => {
ref.current = false
}
}, [])
....
if (ref.current) {
setAnswers(answers)
setIsLoading(false)
}
....
- 第二个选项是使用 useState,
isMounted总是 false,虽然我在组件确实挂载时将其更改为true
const [isMounted, setIsMounted] = useState(false)
useEffect(() => {
setIsMounted(true)
return () => {
setIsMounted(false)
}
}, [])
....
if (isMounted) {
setAnswers(answers)
setIsLoading(false)
}
....
为什么与第一个选项相比,第二个选项不起作用?
【问题讨论】:
-
第二个不起作用,因为当您在组件卸载时设置状态但设置状态只会在下一次渲染时显示更改的值,并且由于您卸载了组件,因此不会重新渲染。跨度>
标签: reactjs react-hooks