Как решить это в реакции?

Есть 16 коробок синего цвета, и если щелкнуть любую коробку, цвет станет красным. Максимум 2 поля могут быть красными, и если вы нажмете на любое 3-е поле, оно станет красным, а первое красное поле станет синим и так далее...

Добро пожаловать в Stack Overflow Suraj! Пожалуйста, включите код, который вы написали до сих пор, и то, с чем у вас возникли проблемы.

Tholle 23.12.2020 06:00

Я написал код, но он не сработал, это означает, что цвет всех 16 блоков меняется на красный, поэтому я удалил этот файл .

Suraj Mohanty 23.12.2020 06:04
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
2
2
85
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Большой! это работает, братан, но мне нужно некоторое объяснение этого кода (если вы не возражаете)

Suraj Mohanty 23.12.2020 06:50

это очень просто, мы создаем одно состояние для хранения отмеченных флажков, и если длина флажков станет больше 2, мы просто удалим первый индекс и добавим самый новый индекс. Я намеренно оставил одну маленькую ошибку, чтобы повеселиться, решая ее.

Ketan Ramteke 23.12.2020 06:52

Другие вопросы по теме