亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 useeffect 和 useref 時出錯 TypeError:無法讀取 null 的屬性

使用 useeffect 和 useref 時出錯 TypeError:無法讀取 null 的屬性

喵喵時光機 2023-08-18 17:00:51
您好,我遇到了 userref 問題,我的應用程序不斷從我不再訪問的頁面讀取代碼const LandingPage = () => {    useEffect(() => {        document.addEventListener("scroll", () => {            if (window.scrollY < (window.pageYOffset + divRef1.current.getBoundingClientRect().bottom)) {                onHeaderColorSwitch('#c8e9e6')                console.log('green')            } else if (window.scrollY >= (window.pageYOffset + divRef2.current.getBoundingClientRect().top) && window.scrollY < (window.pageYOffset + divRef2.current.getBoundingClientRect().bottom)) {                onHeaderColorSwitch('#ffae5a')            } else if (window.scrollY >= (window.pageYOffset + divRef3.current.getBoundingClientRect().top) && window.scrollY < (window.pageYOffset + divRef3.current.getBoundingClientRect().bottom)) {            }        })    }, [])}我有這個代碼,但是當我使用這個更改到聯系頁面時function App() {    let routes =<Switch>   <Route path="/" exact component={landingPage}/>   <Route path="/contact" exact component={contactPage}/>    </Switch>然后當我嘗試滾動新頁面時,我收到此錯誤代碼TypeError: Cannot read property 'getBoundingClientRect' of nullHTMLDocument.<anonymous>my-app/src/screens/landingPage.js:22  19 |   20 | useEffect(() => {  21 |     document.addEventListener("scroll", () => {> 22 |         if (window.scrollY < (window.pageYOffset + divRef1.current.getBoundingClientRect().bottom)) {     | ^  23 |             onHeaderColorSwitch('#c8e9e6')  24 |   25 |         } else if (window.scrollY >= (window.pageYOffset + divRef2.current.getBoundingClientRect().top) &&  window.scrollY < (window.pageYOffset + divRef2.current.getBoundingClientRect().bottom)) {即使我現在位于新頁面,事件偵聽器仍在偵聽。一旦刷新頁面,該錯誤就不會影響我,現在和將來如何防止這種情況發生?
查看完整描述

1 回答

?
慕姐4208626

TA貢獻1852條經驗 獲得超7個贊

您需要在 useEffect 回調函數中刪除監聽器:


useEffect(() => {

? const listener = () => {

? ? ?if (window.scrollY < (window.pageYOffset + divRef1.current.getBoundingClientRect().bottom)) {

? ? ? ? ?onHeaderColorSwitch('#c8e9e6')

? ? ? ? ?console.log('green')

? ? ?} else if (window.scrollY >= (window.pageYOffset + divRef2.current.getBoundingClientRect().top) &&? window.scrollY < (window.pageYOffset + divRef2.current.getBoundingClientRect().bottom)) {

? ? ? ? ?onHeaderColorSwitch('#ffae5a')

? ? ?} else if (window.scrollY >= (window.pageYOffset + divRef3.current.getBoundingClientRect().top) &&? window.scrollY < (window.pageYOffset + divRef3.current.getBoundingClientRect().bottom)) {

? ? ?}

? }

? document.addEventListener("scroll", listener);

? return () => {

? ? // Clean up the subscription

? ? document.removeEventListener(listener);

? };

}, []);

查看完整回答
反對 回復 2023-08-18
  • 1 回答
  • 0 關注
  • 400 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號