Я получаю предупреждение на сайте React, который я создал
./src/components/layout/Navbar.js [1] Line 31: The href attribute requires a valid
address. Provide a valid, navigable address as the href value jsx-a11y/anchor-is-valid
по следующему коду:
<p>
{isEmpty(profile.website) ? null : (
<a
className = "text-white p-2"
href = {profile.website}
target = "#"
>
<i className = "fas fa-globe fa-2x" />
</a>
)}
{isEmpty(profile.social && profile.social.twitter) ? null : (
<a
className = "text-white p-2"
href = {profile.social.twitter}
target = "#"
>
<i className = "fab fa-twitter fa-2x" />
</a>
)}
{isEmpty(profile.social && profile.social.facebook) ? null : (
<a
className = "text-white p-2"
href = {profile.social.facebook}
target = "#"
>
<i className = "fab fa-facebook fa-2x" />
</a>
)}
</p>
Даже несмотря на то, что предупреждение появляется только для первой ссылки, такое же предупреждение появляется и для следующей ссылки, если я временно удалю первую ссылку или изменю href первой ссылки на статический URL-адрес.
Ссылки должны отображаться в виде просто значка.
Я пробовал такие вещи, как использование кнопки (у меня неправильный вид), использование функции для открытия динамического URL-адреса и попытка заставить href быть строкой с помощью '' + {profile.website}. Многие другие предложения не сработали.
Есть ли способ предотвратить ошибку, не меняя правила jsx-a11y? То, что я сделал, не является хорошим шаблоном или это просто ошибка в React или JSX?
Я пробовал использовать одинарные и двойные кавычки и обратные кавычки, это было недействительно. Если бы вы могли привести пример, я попробую еще раз, возможно, я ошибся!
Используйте {profile.website || '#'}





Я не вижу ничего плохого, если я говорю об этом. https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/anchor-is-valid.md
Проверьте эти ссылки. У некоторых людей была такая же проблема, что и у вас, и она возникает из-за компонента Link. Они исправляют это, добавляя исключение в .eslintrc:
первая ссылка => https://github.com/evcohen/eslint-plugin-jsx-a11y/issues/340 а вторая ссылка => Как я могу исправить jsx-a11y / anchor-is-valid при использовании компонента Link в React?
Сообщите мне, если это поможет.
попробуйте заменить
target = "#"
к
target = "_blank"
это кажется более чистым подходом
Я получил аналогичное предупреждение для href, я сделал следующее. Может быть, попробуй это. Я избавился от предупреждения, и функциональность осталась неизменной. Я не уверен, что это правильно. Но попробовал это.
let hrefLink = '#'; passed as a arg like href = {hrefLink}
Используйте href = "/#" для замены href = "#" ИЛИ href = "javascript:;" ИЛИ href = "javascript:void(0);"
Следует удалить предупреждения.
трюк с javascript, похоже, не работает в eslint 7.0.0 The href attribute requires a valid value to be accessible. Provide a valid, navigable address as the href value. If you cannot provide a valid href, but still need the element to resemble a link, use a button and change it with appropriate styles.
Сообщество JS ... Разве мы не должны по крайней мере задаться вопросом, о чем предупреждение, и обсудить последствия его обхода?
И вместо того, чтобы использовать хак для подавления предупреждения, почему бы просто не сообщить линтеру // eslint-disable-next-line в этой конкретной строке?
Я использовал href = "!#" для удаления предупреждений.
Когда я пробовал это, я заметил, что это заставляет страницу полностью отображаться. Итак, я использовал href = "#!"
Вставьте пробел после #, чтобы больше не было предупреждений об этом
заменить href = "#" на href = "# "
но лучше использовать вот так href = "#something" => href = "#profile"
"#" Работает, но оооочень некрасиво. Всегда хорошо иметь варианты, так что спасибо!
Вы также можете скрыть это предупреждение, добавив комментарий eslint-disable-next-line:
// eslint-disable-next-line
<a
onClick = {e => {
// do something
}}
>
example
</a>
пожалуйста, используйте <button> вместо <a>, когда нет атрибута href.
Если вам действительно нужно использовать тег a, он может вам помочь:
<a href = "#" onClick = {ev => {ev.preventDefault(); onClick();}}>"Hello A Tag"</a>
Если вы пытаетесь отобразить ссылку на страницу динамически, вы можете вместо этого заменить тег <a> на тег <div>. Предупреждающее сообщение исчезнет.
// DON't DO THiS
<a className = "page-link" href = "javascript:void(0);" onClick = {() => onPageChange(page)}>
{page}
</a>;
// TRY THIS INSTEAD
<div className = "page-link" onClick = {() => onPageChange(page)}>
{page}
</div>;
Если вы поместите слово "javascript" в атрибут href, вы получите КРАСНОЕ ПРЕДУПРЕЖДЕНИЕ:
index.js:1375 Warning: A future version of React will block javascript: URLs as a security precaution. Use event handlers instead if you can.
Это помогло мне избавиться от предупреждения;
<a href = "#/">...</a>
<a href = {() => false}>...</a>
Или просто <a href = "/">...</a>.
Это просто предупреждение, а не ошибка, что атрибут href требует допустимого значения, поскольку # указывает в никуда, вы можете добавить ссылки на атрибуты href, чтобы удалить это предупреждение, или, если вы все еще находитесь на ранней стадии разработки, просто напишите
/* eslint-disable jsx-a11y/anchor-is-valid */
В верхней части вашего кода он удалит предупреждения с терминала, указанная выше строка отключает правило для указанного файла, в котором оно написано
/* eslint-disable jsx-a11y/anchor-is-valid */
import React from 'react';
const Header = () =>{
return(
<nav className = "navbar navbar-expand-lg navbar-light bg-light">
<a className = "navbar-brand" href = "#">Navbar</a>
<button className = "navbar-toggler" type = "button" data-toggle = "collapse" data-target = "#navbarSupportedContent" aria-controls = "navbarSupportedContent" aria-expanded = "false" aria-label = "Toggle navigation">
<span className = "navbar-toggler-icon"></span>
</button>
</nav>
)
}
Могу ли я использовать указанное выше решение в моих правилах eslint?
вы хотите, чтобы правила eslint отображались в вашей консоли
Я просто хотел знать, как настроить его в моих правилах eslint, и у меня уже есть решение
Укажите путь к href, тогда он не будет показывать эти правила eslint или помещать комментарий, как показано в приведенном выше решении.
Я использовал следующее, чтобы удалить предупреждения.
<a href = "/">
Привет, добро пожаловать в StackOverflow. Часто люди не только хотят получить ответ, но и хотят узнать, почему их ошибка вообще существовала. Не могли бы вы уточнить свой ответ, чтобы ОП и другие могли узнать?
Поздно к игре, но никто не порекомендовал window.location, который просто устанавливает тот же точный маршрут, что и текущий?
Другие решения, такие как "#", "/ #" и "/", действительно изменяют текущий маршрут, верно? Для более общего решения просто используйте window.location, чтобы оставаться на текущей странице без изменений.
<a href = "window.location" onClick = {...}> Better Solution </a>
Если вы действительно хотите, чтобы ваш тег привязки имел метод onClick, вы должны использовать действительную ссылку href, иначе она выдаст ошибку. Атрибут href требует, чтобы действительное значение было доступно. Если вы не можете предоставить действительный href, но по-прежнему хотите, чтобы элемент напоминал ссылку, используйте кнопку и измените его соответствующими стилями.
Измените стиль кнопки с помощью этого свойства, чтобы сделать прозрачным
button{
background-color: Transparent;
background-repeat:no-repeat;
border: none;
cursor:pointer;
overflow: hidden;
outline:none;
}
и установите для текста внутри кнопки цвет, похожий на цвет ссылки
Я использую этот цвет
.editcolor{
color: #1890ff;
}
Я решил свои ошибки этим методом.
Чтобы также предотвратить дефолт, я использую это:
<a href = "/#" onClick = {(e) => e.preventDefault()}>Link Text</a>
Я пробовал, но большинство приведенных выше ответов не сработали для меня, поскольку новый eslint не позволяет большинство из них. Вместо этого упоминается отключение eslint для конкретной строки.
Просто добавьте: // eslint-disable-next-line
в строку, которая идет непосредственно перед строкой jsx, которая вызывает ошибку.
Также добавьте этот комментарий в {/ * ... * /}, иначе будет отображаться ошибка.
Использование: {/* // eslint-disable-next-line */ }}
Надеюсь, это решит эту проблему!
Если мы написали правильный URL-адрес, но он также дает ту же ошибку, что и я поставил www.reactjs.org, тогда он также дает такое же предупреждение. Чтобы решить эту проблему, у нас есть атрибут в теге привязки, т.е.
<a
className = "App-link"
href = "https://reactjs.org"
target = "_blank"
rel = "noopener noreferrer"
>
Learn React
</a>
Я использовал href в теге a. это удалить предупреждения.
<a href>Pictures</a>
Вы пробовали заключать свое выражение в кавычки?