выберите только одну карту reactjs

#javascript #reactjs

#javascript #reactjs

Вопрос:

Я создаю 3 карты, и мне нужно, чтобы вы могли выбрать одну из них, и у нее есть div внутри, когда я выбираю ее и меняю css, пример, в котором у меня есть выбранная карта, является вторым, и я хотел бы, чтобы то же самое произошло с другими, но это может сделать только один быть выбранным в одно и то же время

 import React from "react";
import "./styles.css";

export default function App() {
  return (
    <div className="App">
      <div className="card"></div>
      <div className="card cardSelect">
        <div className="select">select</div>
      </div>
      <div className="card"></div>
    </div>
  );
}


.card {
  width: 5rem;
  height: 5rem;
  background: red;
  margin: 1rem;
}
.cardSelect {
  box-shadow: 2px 4px 30px 0px rgba(0, 0, 0, 0.75);
}
 

Комментарии:

1. Пожалуйста, добавьте логику в свой компонент и покажите проблему с вашим кодом. SO не должен быть форумом для публикации вакансий: D

2. @JulianKleine Я не добавил логику, так как я не знаю, как это сделать, я добавил простой код, так как я не могу поместить свой рабочий код, поэтому есть только 3 простые карты без чего-то сложного

Ответ №1:

Вы можете добиться этого с помощью orchestrator или родительского компонента. Я создал для вас более простой пример в code sandbox

Активная карта должна управляться из более высокого экземпляра. В данном случае это сам компонент приложения. Но вы можете создать компонент Cards и Card для его инкапсуляции. например

 <Cards>
   <Card />
   <Card />
   <Card />
</Cards>
 

Вот код примера в code sandbox:

 import React from "react";
import "./styles.css";

const cardStyle = {
  width: "5rem",
  height: "5rem",
  background: "red",
  margin: "1rem"
};

const cardSelect = {
  boxShadow: "2px 4px 30px 0px rgba(0, 0, 0, 0.75)"
};

export default function App() {
  const [selected, setSelected] = React.useState(0);

  return (
    <div className="App">
      <div
        style={{ ...cardStyle, ...(selected === 0 amp;amp; cardSelect) }}
        onClick={() => setSelected(0)}
      >
        {selected === 0 amp;amp; <div className="select">select</div>}
      </div>

      <div
        style={{ ...cardStyle, ...(selected === 1 amp;amp; cardSelect) }}
        onClick={() => setSelected(1)}
      >
        {selected === 1 amp;amp; <div className="select">select</div>}
      </div>

      <div
        style={{ ...cardStyle, ...(selected === 2 amp;amp; cardSelect) }}
        onClick={() => setSelected(2)}
      >
        {selected === 2 amp;amp; <div className="select">select</div>}
      </div>
    </div>
  );
}
 

Ответ №2:

Что вам нужно сделать, так это

  1. Добавьте состояние в выбор уровня приложения где-нибудь, например. `const [selection, setSelection] = useState(‘card-0’)
  2. Создайте компонент для карт, например
  3. Визуализируйте этот компонент три раза <CardComponent IsSelected={selection === ‘card-2’} />`
  4. Внутри Cardcomponent добавьте этот класс, только если он выбран. className={"card " prop.isSelected ? "cardSelect" : ""}

Комментарии:

1. Намеренно оставил вам что-то для изучения и исследования