Я новичок в React и хочу обновить массив 2d в l oop одним щелчком мыши.
Реализация, которую я хочу, похожа на приведенный ниже
- L oop 2d массив
- Каждый элемент в l oop, закрасьте этот элемент желтым (это означает, что требуется рендеринг)
- Этот процесс должен быть отложен для каждого окрашивания
Однако , setState
React является асинхронным и пакетным одновременно, поэтому я использовал setTimeout
, но он не работает.
Как я могу решить эту проблему. Вот мой код и коды и ссылка на ящик
import React, { useState } from "react";
export default function App() {
const [board, setBoard] = useState(Array(10).fill(Array(10).fill(null)));
const onClick = () => {
const copy = JSON.parse(JSON.stringify(board));
board.forEach((row, ridx) => {
row.forEach((col, cidx) => {
copy[ridx][cidx] = "yellow";
setTimeout(setBoard(copy), 1000 * (ridx + cidx));
});
});
};
return (
<>
{board.map((row, ridx) => (
<div key={ridx} style={{ display: "flex" }}>
{row.map((col, cidx) => {
const bgColor = board[ridx][cidx];
return (
<div
style={{
width: "64px",
height: "64px",
border: "1px solid black",
backgroundColor: bgColor
}}
/>
);
})}
<br />
</div>
))}
<button onClick={onClick}>START</button>
</>
);
}