#javascript #reactjs
#javascript #reactjs
Вопрос:
Я переключаю изображение со стрелкой всякий раз, когда мой div
щелкает. Я контролирую состояние щелчка с помощью
const [toggleArrow, setToggleArrow] = useState(false)
В моем div есть onClick
функция, которая управляет состоянием и переключает faq-subject-toggle-arrow
класс, который добавляет изображение
<div className={`faq-subject ${toggleArrow ? 'faq-subject-toggle-arrow' : ''}`} onClick={() => {
setToggleArrow(!toggleArrow)
}>
Моя проблема в том, что у меня есть 50 div
секунд для нескольких стилей, и я не хочу создавать 50 состояний для переключения одного изображения.
Есть ли более эффективное решение для этого с меньшим количеством кода?
Комментарии:
1. превратите этот код в один компонент и используйте его несколько раз. таким образом, состояние может находиться внутри каждого компонента и не влиять друг на друга
2. Вы можете добиться этого, но имея этот div в отдельном компоненте и управлять этим состоянием в этом компоненте.
Ответ №1:
Я создал что-то, что делает то же самое. Я извлек ваш код и создал компонент. теперь состояние находится внутри компонента и не влияет на другие.
компонент
import { useState } from "react";
export const Button = () => {
const [toggleArrow, setToggleArrow] = useState(false);
return (
<div
style={{ width: "50px", height: "50px", margin: "10px" }}
className={`faq-subject ${toggleArrow ? "faq-subject-toggle-arrow" : ""}`}
onClick={() => {
setToggleArrow(!toggleArrow);
}}
></div>
);
};
в css-файле у меня не было одинаковых классов, поэтому я создал свой.
.faq-subject {
background: blue;
}
.faq-subject-toggle-arrow {
background: orange;
}
теперь вы можете использовать его везде, где захотите, несколько раз
import { Button } from "./button";
import "./styles.css";
export default function App() {
return (
<div className="App">
<Button />
<Button />
<Button />
<Button />
<Button />
</div>
);
}