如何在 JavaScript 中連續映射數組?

亞歷克斯·布蘭

我正在嘗試在 React.JS 中創建一個警報組件,它將接收一個數組作為道具,然後遍歷內部的所有元素並將它們顯示在警報組件中。

當數組映射結束時,我不知道如何重新啟動循環。

這是我的代碼:

        useEffect(() => {
                props.messages.map((item, index) => {
                        setTimeout(() => {
                          setMessage(item);
                        }, 5000*index)
                      });
        },[]);

我想連續運行循環,直到用戶關閉通知警報。

我的猜測是將地圖包裹在 while / do while 中,以便在用戶關閉通知欄之前運行它。一旦數組的映射到達最後一個元素,我就無法重新啟動循環。

德魯里斯

您實際上並不需要計算索引並將其重置為零。

添加index狀態和安裝useEffect掛鉤以在 5 秒間隔內增加索引。不要忘記返回一個清理函數來清除間隔計時器。

const [index, setIndex] = React.useState(0);

useEffect(() => {
  const timerRef = setInterval(() => {
    setIndex(i => i + 1);
  }, 5000);
  return () => clearInterval(timerRef);
},[]);

使用useEffect依賴於index狀態的第二個鉤子當它更新時,取index數組長度模數來計算有效的範圍內索引並更新當前message狀態。

useEffect(() => {
  const { messages } = props;
  setMessage(messages[index % messages.length]);
}, [index]);

但是,第二個useEffect鉤子和message狀態不是必需的,可以認為是派生狀態。派生自props.messages數組和當前index狀態。您可以直接在呈現的警報中直接使用這些。

例子:

<Alert message={messages[index % messages.length]} />

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在 JavaScript 中過濾和映射數組

如何在javascript中連續添加列號?

如何在python中對二維數組中的連續數據進行分組

如何創建一個java程序來查找數組中連續數字的數量?

如何在javascript中設置數組多維

如何在 JavaScript 中將嵌套數組轉換為“鍵控”數組?

如何在javascript中將數組添加到多數組?

如何在 JavaScript 中將元組的 Python 列表轉換為數組?

如何在javascript中按array.objectProperty對數組項進行分組?

如何在 Javascript 中映射嵌套对象?

如何在 JavaScript 中創建一個填充任意數量空數組的數組?

如何在 JS 中映射嵌套數組

如何在 Javascript 中將 Getjson 轉換為字典或數組中的值

如何在 JavaScript 中的元素數組中按 id 選擇

如何在 Javascript 中更新嵌套對像數組中的鍵/值對

如何在javascript中打破對像數組中的對象

如何在javascript中找到數組的長度

數組等於 useState 聲明如何在 Javascript 中工作?

如何在對像數組中獲取具有唯一值的鍵?(JavaScript)

如何在javascript中將嵌套對象轉換為對像數組?

如何在Javascript中循環沒有索引的對像數組作為字段?

如何在javascript中將字節數組轉換為blob以獲得角度?

如何在Javascript中將Django列表檢索為數組

如何在 JavaScript 中將類變量初始化為空數組?

如何在javascript數組中查找字符串值

如何在 JavaScript 中轉換和重新排序數組?

如何在javascript中將數組轉換為嵌套對象?

如何在 Javascript 中對 Java 風格的包名稱數組進行排序?

如何在JavaScript中映射“映射”的键/值对?