第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

window.addEventListener 未按預(yù)期更新狀態(tài)

window.addEventListener 未按預(yù)期更新狀態(tài)

慕森卡 2023-11-11 15:57:41
我想從頭開始構(gòu)建無限滾動。這是代碼:import React,{useEffect, useRef, useState} from 'react';const Container:React.FC<{}> = () => {  const containerRef = useRef<HTMLDivElement | null>(null)  const [ scrollNumber, setScrollNumber ] = useState<number>(1);  const [posts, setPosts] = useState<any[]>([]); useEffect(() => {  async function main(){      const req = await  fetch('https://jsonplaceholder.typicode.com/posts');      const result = await req.json();      const pst = result.splice(0,10*scrollNumber);      setPosts(pst)    function scrollHandler(){   if(containerRef.current?.getBoundingClientRect().bottom === window.innerHeight){          console.log("Salam", scrollNumber);          setScrollNumber(scrollNumber + 1);        }  }  window.addEventListener("scroll", scrollHandler);  return () => window.removeEventListener("scroll", scrollHandler);  }  main()},[]) useEffect(() => {  const loadData = async () => {    const req = await  fetch('https://jsonplaceholder.typicode.com/posts');    const result = await req.json();    const pst = result.splice(0,10*scrollNumber);    setPosts(pst)  }  loadData() },[scrollNumber])  return (    <div  ref={containerRef}>      {posts.map(post => (        <div key={post.id}>          <br/>          <h1>{post.title}</h1>      (<p>{post.body}</p>)      <code>{post.userId}</code>      <br/><br/>      <hr/>        </div>      ))}    </div>  )}export default Container但有一個問題。當(dāng)我測試它時。它總是更新為 2 沒有其他。我搜索了一下。我發(fā)現(xiàn)window.addEventListener只記住initialState,這就是state總是更新為2的原因。但我找不到任何代碼解決方案。
查看完整描述

1 回答

?
當(dāng)年話下

TA貢獻1890條經(jīng)驗 獲得超9個贊

在第一個useEffect依賴數(shù)組中是空的,這意味著如果您在其中使用任何狀態(tài)變量,它的值不會在效果中改變


正如我所看到的,您正在使用scrollNumber設(shè)置的下一個狀態(tài)setScrollNumber(scrollNumber + 1);和值scrollNumber不會改變內(nèi)部效果,因為依賴項數(shù)組為空


因此,如果您對效果進行了任何更改,您必須告訴反應(yīng)重新初始化效果scrollNumber


所以scrollNumber作為一個依賴項會為你工作


 useEffect(() => {

     ...


    function scrollHandler(){

        if(containerRef.current?.getBoundingClientRect().bottom === window.innerHeight) {

            console.log("Salam", scrollNumber);

            setScrollNumber(scrollNumber + 1);

        }

    }


    window.addEventListener("scroll", scrollHandler);

    return () => window.removeEventListener("scroll", scrollHandler);


.....

}, [scrollNumber]) //add a dependency


查看完整回答
反對 回復(fù) 2023-11-11
  • 1 回答
  • 0 關(guān)注
  • 220 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號