#javascript #reactjs #onclick
#javascript #reactjs #onclick
Вопрос:
У меня есть этот компонент, и я сопоставляю свой массив, чтобы создать 10 элементов навигации. Как мне добавить метод onClick, чтобы добавить активный класс к выбранному элементу. Есть ли здесь лучшая практика с помощью хуков / более нового способа реагирования? На самом деле я не ищу здесь решение для маршрутизатора React.
Я пропустил, создав их <a>
и <span>
против <ul>
amp; <li>
? Имеет ли это значение?
import React from "react";
var sections = [
"arts",
"business",
"health",
"home",
"movies",
"opinion",
"politics",
"science",
"sports",
"technology",
];
export default function Masthead() {
return (
<div className="masthead">
{sections.map((section, idx) => {
return (
<a href={section} key={idx}>
<span>{section}</span>
</a>
);
})}
</div>
);
}
Ответ №1:
Я бы сделал что-то вроде этого:
import React from "react";
var sections = [
"arts",
"business",
"health",
"home",
"movies",
"opinion",
"politics",
"science",
"sports",
"technology",
];
export default function Masthead() {
const [cur_section, setCurSection] = React.useState('')
return (
<div className="masthead">
{sections.map((section, idx) => {
return (
<a href={"#" section} key={idx}
onClick={() => setCurSection(section)}
className={section === cur_section ? "active": ""}
>
<span>{section}</span>
</a>
);
})}
</div>
);
}
Вот как вы могли бы добавить active
класс к элементу onClick. a
Конечно, проблема с тегами заключается в том, что, я полагаю, они приведут вас на другую страницу. Так что это нужно каким-то образом решить.
Обратите внимание, как я добавил {"#" section}
в href. Это для того, чтобы мы могли оставаться на текущей странице.
Вот общая идея: https://codesandbox.io/s/blissful-bush-7n9vf?file=/src/App.js
Комментарии:
1. какой компромисс заключается в том, чтобы просто переписать его как <ul>/<li> . Я не против это сделать. Что-нибудь, что я теряю? Я специально не выбирал <a> .
2. @Christian Я предположил, что в этом нет никаких недостатков, если это соответствует потребностям вашего приложения. Я помню, что ваш сайт React Times переводил пользователя на новую страницу, поэтому вам придется как-то это выяснить, если вы
a
удалите теги, потому что li не будет ссылаться на другую страницу без дополнительного JS-кода.3. да, еще раз спасибо, я хочу, чтобы URL добавлял новое название раздела «/ мнение» или «/ спорт», но мне не нравится, что он перезагружает страницу. Я не смог реализовать проблему с маршрутизатором React. Мне пришлось бы вернуться к началу и медленно добавить его обратно, чтобы убедиться, что он ничего не сломает. но да, похоже, что ul / li не позволит мне добавить новую страницу, даже с частью «# section». Я могу придерживаться <a>/ <span>просто чтобы иметь возможность заставить его работать так, как я хочу. это забавный проект, а не ра бота. Поэтому я бы предпочел, чтобы это работало так, как я х отел. Спасибо!
4. и благодаря вашему методу «# section» я теперь не получаю обновление страницы, но оно не повторяется с помощью api. этот бит сломал «const getCurrentPage = () => { const url = новый URL(окно. location.href); const page = url.pathname.split(«/»).pop(); вернуть страницу? страница: «главная»; };»
5. Вы должны разбить проблему с маршрутизатором react, с которой вы столкнулись, на жевательные кусочки и начать публиковать их здесь. Сообщество проведет вас через это. React router сделает вашу жизнь проще.