Есть 16 коробок синего цвета, и если щелкнуть любую коробку, цвет станет красным. Максимум 2 поля могут быть красными, и если вы нажмете на любое 3-е поле, оно станет красным, а первое красное поле станет синим и так далее...
Я написал код, но он не сработал, это означает, что цвет всех 16 блоков меняется на красный, поэтому я удалил этот файл .
import React, { useState } from "react";
import "./style.css";
const Box = ({ onPress, style }) => {
return <div style = {style} onClick = {onPress} className = "box" />;
};
export default function App() {
/*
This is the main part of the app, here we create a state called checked which
will hold the last two indexes of checked boxes, and based on that index,
we will conditionally set the background color of the Box component to either
red or blue.
*/
const [checked, setChecked] = useState([]);
let array = Array.from({ length: 16 }, () => 0);
// console.info(array);
return (
<div className = "container">
{array?.map((_, index) => (
<Box
key = {index}
onPress = {() => {
let temp = [...checked];
if (temp.length === 2) {
temp.shift();
}
if (!temp.includes(index)) setChecked([...temp, index]);
}}
style = {{ backgroundColor: checked.includes(index) ? "red" : "blue" }}
/>
))}
</div>
);
}
Полный пример: Пример Stackblitz
Большой! это работает, братан, но мне нужно некоторое объяснение этого кода (если вы не возражаете)
это очень просто, мы создаем одно состояние для хранения отмеченных флажков, и если длина флажков станет больше 2, мы просто удалим первый индекс и добавим самый новый индекс. Я намеренно оставил одну маленькую ошибку, чтобы повеселиться, решая ее.
Добро пожаловать в Stack Overflow Suraj! Пожалуйста, включите код, который вы написали до сих пор, и то, с чем у вас возникли проблемы.