#javascript #reactjs
#javascript #reactjs ( реакция ) #reactjs
Вопрос:
Я пытаюсь создать навигационное меню, в котором при нажатии на элемент списка изменится название класса.
Это код, который у меня есть сейчас —
function Nav(props) {
const [selected, setSelected] = useState(false);
const toggleSelected = () => setSelected(prevState => !prevState);
return <div>
<ul>
<li className={!selected ? " not-selected" : " selected"} onClick={toggleSelected}>Item 1</li>
<li className={!selected ? " not-selected" : " selected"} onClick={toggleSelected}>Item 2</li>
</ul>
</div>;
}
Проблема с этим, однако, заключается в том, что при изменении состояния это влияет на все, а не только на один элемент.
Как я могу сделать его специфичным только для одного элемента?
Ответ №1:
Обновленный:
Попробуйте создать список на карте (с идентификаторами) и выполнить итерацию по нему, затем отправьте событие press, чтобы оно раскрасило этот конкретный элемент.
т.е.
NavItems.map(item => <li className={selected == item.id ? "green" : "red") onClick={()=>toggleSelected(item.id)}{item.name}</li>)
and modify toggleSelected as
const toggleSelected = (id) => setSelected(id);
Надеюсь, это решит вашу проблему!
Комментарии:
1. Я поместил элементы в массив и сделал это — {navItems.map(функция (имя) { возврат «не выбрано»: «выбрано»} onClick={toggleSelected} >{name}</li>; })} Он по-прежнему меняет класс для всех элементов, хотя он по-прежнему меняет имя класса для всех элементов
2. Я обновил
Answer
Перепроверку и отказался от голосования.. Спасибо 😉
Ответ №2:
У меня есть этот пример изолированной среды кода, который поможет вам понять, как обрабатывать различные состояния для каждого элемента в цикле.
https://codesandbox.io/s/handling-states-example-with-data-fetching-w9m27