Javascript - 如何在 React 中一遍又一遍地循環遍歷數組

沙赫里亞爾

想像一下,我有一個像這樣的對像數組:

const items = [
    {name: "item 0"},
    {name: "item 1"},
    {name: "item 2"}
]

和這樣的組件:

const [currentItemIndex, setCurrentItemIndex] = useState(0)

setInterval(function () {
   if (currentItemIndex < 3) {
      setCurrentItemIndex(currentItemIndex + 1);
   } else {
      clearInterval();
   }
}, 5000);
   
return (
    <div>
        <p> {items[currentItemIndex].name} <p>
    </div>
)

我想currentItemIndex每 5 秒更新一次,以便div顯示下一個項目,如果它結束,它應該重新開始:0, 1, 2, 0, 1, 2, 0, 1, 2 ...

問題是:它第一次正確循環,但到達結尾後,它顯示第一項幾分之一秒,然後轉到最後一項:0, 1, 2, 0 (really quick to) 2

我做錯了什麼?
我搜索了這個,但每篇文章都在談論“如何防止無限循環”,而不是“如何使用它們”!

康斯坦丁·莫丁

你可以像這樣使用useEffect和使用setTimeout它:

const items = [{ name: "item 0" }, { name: "item 1" }, { name: "item 2" }];

const App = () => {
  const [currentItemIndex, setCurrentItemIndex] = React.useState(0);

  React.useEffect(() => {
    setTimeout(
      () => setCurrentItemIndex((currentItemIndex + 1) % items.length),
      1000
    );
  }, [currentItemIndex]);

  return (
    <div>
      <p> {items[currentItemIndex].name} </p>
    </div>
  );
};

// export default App;

ReactDOM.render(<App />, document.getElementById('root'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/17.0.1/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/17.0.1/umd/react-dom.production.min.js"></script>
<div id="root"></div>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何修饰一个类的所有功能而不用为每个方法一遍又一遍地键入它?

我将如何一遍又一遍地运行此代码?

一遍又一遍地在D3 React Component中复制相同的帮助函数

如何使用列表来避免一遍又一遍地重复“和/或”运算符?

为什么React会一遍又一遍地以不变的状态渲染我的组件?

如何匹配一个单词,一遍又一遍地打印一行和下一行

当我使用React钩子时,API被一遍又一遍地调用

Flutter-如何不一遍又一遍地调用同一服务?

Javascript类-如何避免一遍又一遍地调用方法?

如何一遍遍地迭代或循环?

如何停止一遍又一遍地输入相同的错字?

选中复选框后,如何使过程一遍又一遍地重启?

如何在Android中一遍又一遍地播放相同的音乐文件

如何使用OOP避免一遍又一遍地重复相同的代码?

如何在Java中一遍又一遍地调用语句

我如何才能在自己的类中制作一个私有方法,以便一遍又一遍地使用

如何让某个命令一遍又一遍地重复?

如何使用参数一遍又一遍地运行函数?

我如何一遍又一遍地问用户一个问题,直到他们输入正确的值字段?

如何一遍又一遍地发送数据包直到响应(Scapy)

React 获取数据一遍又一遍地触发

我如何在 Python 中一遍又一遍地向一个数字添加一些东西

如何在不一遍又一遍地编写相同代码的情况下创建具有动态内容的小部件的长列表?

Javascript拆分数组并一遍又一遍地调用它

如何一遍又一遍地执行异步功能?

如何不一遍又一遍地重複類似的功能

我想知道如果我將它包裝在標籤中,為什麼它不會在 JavaScript click 函數中一遍又一遍地顯示循環結果

您如何製作一個循環,以便一遍又一遍地創建相同的圖形,但每次都針對不同的變量?

如何使函数一遍又一遍地执行随机事件