函数内部的 React setState 第一次没有被读取

React setState inside function doesn't get read the first time

我使用 counter0 开始遍历数组块,例如 useState(vidChunks[counter]),并使用 npm react-infinite-scroll-component 每次达到 vidList.length 时,我都会通过 InfiniteScroll 组件调用 fetchMoreData 函数。 它工作正常,但第一次,它重复完全相同的视频块,我不明白为什么。好像它认为 vidChunks[0] 和 vidChunks[1] 是相同的内容,但它不是,我将它与 counter 一起调试,它也正确增加。

const vidChunks = _.chunk(vidArray, 5)

const [counter, setCounter] = useState(0)
const [vidList, setVidList] = useState(vidChunks[counter])

console.log("counter "+counter)

const fetchMoreData = () => {
  setCounter(counter + 1)

  if (vidChunks[counter] === undefined || vidChunks[counter] == null) {
    setLoadText('Loaded all videos')
    return;
  }
    const newVidList = [ ...vidList, ...vidChunks[counter] ]
    setVidList(newVidList);
}

来自 setCounter() 调用的新 counter 值在下一次渲染之前不可用。

相反,从旧的 counter 值创建一个新的 Counter 变量,将其用于您的中间逻辑,然后用它调用 setCounter()

const fetchMoreData = () => {
  
  const newCounter = counter + 1;

  if (vidChunks[newCounter] === undefined || vidChunks[newCounter] == null) {
    setLoadText('Loaded all videos')
    return;
  }
    const newVidList = [ ...vidList, ...vidChunks[newCounter] ]
    setVidList(newVidList);
    setCounter(newCounter);
}