Предупреждение сайта React: для атрибута href требуется действительный адрес. Укажите действительный адрес для навигации в качестве значения href jsx-a11y / anchor-is-valid

Я получаю предупреждение на сайте 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?

Вы пробовали заключать свое выражение в кавычки?

NielsNet 14.10.2018 11:01

Я пробовал использовать одинарные и двойные кавычки и обратные кавычки, это было недействительно. Если бы вы могли привести пример, я попробую еще раз, возможно, я ошибся!

msm1089 14.10.2018 11:21

Используйте {profile.website || '#'}

Tunji Oyeniran 28.11.2020 17:11
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
65
3
76 458
18

Ответы 18

Я не вижу ничего плохого, если я говорю об этом. 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"

это кажется более чистым подходом

finickyTunnel 13.06.2020 15:03

Я получил аналогичное предупреждение для 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.

Sonic Soul 11.06.2020 21:41

Сообщество JS ... Разве мы не должны по крайней мере задаться вопросом, о чем предупреждение, и обсудить последствия его обхода?

bluenote10 23.11.2020 21:05

И вместо того, чтобы использовать хак для подавления предупреждения, почему бы просто не сообщить линтеру // eslint-disable-next-line в этой конкретной строке?

bluenote10 28.11.2020 10:31

Я использовал href = "!#" для удаления предупреждений.

Когда я пробовал это, я заметил, что это заставляет страницу полностью отображаться. Итак, я использовал href = "#!"

andrecj 08.12.2019 17:22

Вставьте пробел после #, чтобы больше не было предупреждений об этом

заменить href = "#" на href = "# " но лучше использовать вот так href = "#something" => href = "#profile"

"#" Работает, но оооочень некрасиво. Всегда хорошо иметь варианты, так что спасибо!

Rafael S. Fijalkowski 20.03.2020 15:02

Вы также можете скрыть это предупреждение, добавив комментарий 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.

Ссылка: Страница разрешения ошибки EsLint

Это помогло мне избавиться от предупреждения;

<a href = "#/">...</a>  
<a href = {() => false}>...</a>

Или просто <a href = "/">...</a>.

Yuri Cardoso 13.07.2020 06:37

Это просто предупреждение, а не ошибка, что атрибут 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?

Dijiflex 23.01.2021 19:34

вы хотите, чтобы правила eslint отображались в вашей консоли

Sandeep Mukherjee 23.01.2021 19:40

Я просто хотел знать, как настроить его в моих правилах eslint, и у меня уже есть решение

Dijiflex 24.01.2021 09:41

Укажите путь к href, тогда он не будет показывать эти правила eslint или помещать комментарий, как показано в приведенном выше решении.

Sandeep Mukherjee 25.01.2021 18:26

Я использовал следующее, чтобы удалить предупреждения.

<a href = "/">

Привет, добро пожаловать в StackOverflow. Часто люди не только хотят получить ответ, но и хотят узнать, почему их ошибка вообще существовала. Не могли бы вы уточнить свой ответ, чтобы ОП и другие могли узнать?

jnovack 28.09.2020 12:12

Поздно к игре, но никто не порекомендовал 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 */ }}

То же самое советуют:
screenshot of error


Надеюсь, это решит эту проблему!

Если мы написали правильный URL-адрес, но он также дает ту же ошибку, что и я поставил www.reactjs.org, тогда он также дает такое же предупреждение. Чтобы решить эту проблему, у нас есть атрибут в теге привязки, т.е.

<a
   className = "App-link"
   href = "https://reactjs.org"
   target = "_blank"
   rel = "noopener noreferrer"
    >
      Learn React
    </a>
  1. className используется для стиля.
  2. href используется для ссылок.
  3. цель, используемая для открытия ссылки на новую вкладку или нет.
  4. Rel используется для вывода этого предупреждения в реакции.

Я использовал href в теге a. это удалить предупреждения.

<a href>Pictures</a>

Другие вопросы по теме