响应站点警告: href 属性需要一个有效的地址

我在我建的一个反应网站上收到了警告

./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,以及使用 '' + {profile.website}强制 href 为字符串。许多其它建议都没有奏效。

有没有办法在不更改 jsx-a11y 规则的情况下防止错误?我所做的不是一个好的模式,还是仅仅是 React 或 JSX 中的一个 bug?

125738 次浏览

I don't see something wrong if I'm refering to this. https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/anchor-is-valid.md

Check in these links. Some people had the same problem than you and it comes from a Link component. They fix it in adding an exception to .eslintrc:

first link => https://github.com/evcohen/eslint-plugin-jsx-a11y/issues/340 and the second link => How can I fix jsx-a11y/anchor-is-valid when using the Link component in React?

Let me know if it's helping.

try replacing

target="#"

to

target="_blank"

I got the similar warning for href, I did as follows. May be try this. I got rid of the warning and functionality is intact. I am not sure this is correct. But tried this.

let hrefLink = '#'; passed as a arg like href={hrefLink}

Use href="/#" to replace href="#" OR href="javascript:;" OR href="javascript:void(0);"

It should remove the warnings.

I've used href="!#" to remove warnings.

Insert space after # so no more warning about it

replace href="#" to href="# " but better if use like that href="#something" => href="#profile"

You also can hide this warning adding a eslint-disable-next-line comment:

// eslint-disable-next-line
<a
onClick={e => {
// do something
}}
>
example
</a>

please use <button> instead of <a> when there's no href attribute.

official reference

If you really have to use the a tag, it maybe help you:

<a href="#" onClick={ev => {ev.preventDefault(); onClick();}}>"Hello A Tag"</a>

If you are trying to render a page link dynamically then you can switch out an <a> tag for a <div> tag instead. The warning message will go away.

// 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>;

If you put "javascript" word in the href attribute then you will get a RED WARNING:

index.js:1375 Warning: A future version of React will block javascript: URLs as a security precaution. Use event handlers instead if you can.

Reference: EsLint error resolution page

These worked for me to get rid off the warning;

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

This is just a warning not a error that href attribute requires a valid value as # points to nowhere you can add links to href attributes to remove this warnings or if you are still in early development phase just write

/* eslint-disable jsx-a11y/anchor-is-valid */

On top of your code it will remove the warnings from the terminal, the above line disables the rule for the specified file where it is written

/* 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>
)
}

I've used the following to remove warnings.

<a href="/">

Late to the game but surprised no one recommended window.location, which simply sets the same exact route as the current?

Other solutions such as "#", "/#", and "/" actually modify the current route right? For a more generic solution just use window.location to stay on the current page without modification.


<a href="window.location" onClick={...}> Better Solution </a>

If you really want your anchor tag to have an onClick method you must use a valid href link orelse it will throw an error , The href attribute requires a valid value to be accessible. 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.

Change you button style with this property to make transparent

button{
background-color: Transparent;
background-repeat:no-repeat;
border: none;
cursor:pointer;
overflow: hidden;
outline:none;
}

and set the text inside the button to the resemble link color

I have use this color

.editcolor{
color: #1890ff;
}

I resolved my errors with this method.

To also prevent default I use this:

<a href="/#" onClick={(e) => e.preventDefault()}>Link Text</a>

I tried but most of the answers above did not work for me since the newer eslint does not allow most of them. Instead, it mentions disabling eslint for the specific line.

Simply add:
// eslint-disable-next-line
to the line which comes just before the jsx line that throws error.

Also, add this comment within {/* ... */} else it will show error.

Usage: {/* // eslint-disable-next-line */ }}

They advise the same thing:
screenshot of error


Hope this solves it!

If we have written correct url but it also gives the same error like I put www.reactjs.org then it also gives the same warning. To resolve these problem we have an attribute in anchor tag i.e.

<a
className="App-link"
href="https://reactjs.org"
target="_blank"
rel="noopener noreferrer"
>
Learn React
</a>
  1. className used for style.
  2. href used for links.
  3. target used for open a link into new tab or not.
  4. Rel is used to outcome from that warning in react.

I've used the href in tag a. it's remove warnings.

<a href>Pictures</a>

You just need to change "#" to "# ". Good luck

  <li className="nav-item pointer">
<a onClick={logout} href="/#"  className="nav-link">
LOGOUT
</a>
</li>

or just use

href="/"