[英]setTimeout not clearing with React useEffect hook on mobile devices
[英]React: setTimeout not clearing within useEffect hook
目前,我的應用在/home
頁面上的介紹 5 秒后切換到/about
頁面。 如果有人手動更改頁面,我想打破這個超時。
為此,我有一個 introDisplayed 的introDisplayed
,默認情況下為false
。 通過單擊應用程序中的鏈接, introDisplayed
變為true
為什么 useEffect 中的 setTimeout 沒有清除? 作為參考,我列出了我在這個問題上的所有嘗試。
澄清:我嘗試將introDisplayed
單獨添加到 useEffect 中的依賴項,以及setIntroDisplayed
建議的history
和 setIntroDisplayed ,在這種情況下它不會改變任何東西
const Page = ({ introDisplayed, setIntroDisplayed }) => {
const history = useHistory()
const location = useLocation()
// useEffect(() => {
// if (introDisplayed === false) {
// setTimeout(() => {
// setIntroDisplayed(true)
// history.push("/about")
// }, 5000)
// } else clearTimeout()
// })
// useEffect(() => {
// if (introDisplayed === false) {
// var timer = setTimeout(() => {
// setIntroDisplayed(true)
// history.push("/about")
// }, 5000)
// } else clearTimeout(timer)
// })
useEffect(() => {
const timer = setTimeout(() => {
setIntroDisplayed(true)
history.push("/about")
}, 1000)
if (introDisplayed === true) {
return () => clearTimeout(timer)
}
})
return ()
}
我認為您剛剛忘記在useEffect()
添加依賴項。
useEffect(() => {
if(introDisplayed === true) return;
const timer = setTimeout(() => {
setIntroDisplayed(true)
history.push("/about")
}, 1000)
return () => clearTimeout(timer)
}, [introDisplayed])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.