React:有关a标签控制台警告的一些问题

news/2024/7/5 5:12:39

近几日在写react项目的时候,发现了一些问题,特此记录!

目录

1.控制台警告信息,由target="_blank"引起的问题

2.由href=""引起的问题


1.控制台警告信息,由target="_blank"引起的问题

 Using target="_blank" without rel="noreferrer" (which implies rel="noopener") is a security risk in older browsers: see https://mathiasbynens.github.io/rel-noopener/#recommendations  react/jsx-no-target-blank

该警告是由下面示例代码引起的

function Test() {
    return (
        <div>
            <a target="_blank" href='https://www.baidu.com/'>百度</a>
        </div>
    )
}

export default Test

我们都知道,当在a标签中使用 target="_blank" 的作用,在新的窗口打开链接,这里顺便做一个有关target的复习:

_blank在新窗口中打开链接
_parent在父窗体中打开链接
_top在当前窗体打开链接,并替换当前的整个窗体(框架页)
_self在当前窗体打开链接(默认值)

解决办法:

在a标签中添加rel="noopener noreferrer"

<a target="_blank" href='https://www.baidu.com/' rel='noopener noreferrer'>百度</a>

解释说明:在不使用rel这段代码的时候,使用target='_blank'认为是一个安全漏洞,新的页面可以通过window.opener访问您的窗口对象,从而可以使用window.opener.location = newURL将您的页面导航至不同的网址,也就是说我可以控制你页面的去向,所以不安全,发出警告。。。当我们使用了rel = 'noopener noreferrer'后,我们通过window.opener就会得到一个null,无计可施了吧0.0

谷歌解释,当然需要用科学上网的方式,当然我也截了个长图,嘿嘿

2.由href=""引起的问题

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. Learn more: https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/docs/rules/anchor-is-valid.md  jsx-a11y/anchor-is-valid

该警告信息是由下面代码引起的

function Test() {
    const click = () => {
        console.log(123)
    }

    return (
        <div>
            <a onClick={() => click()}>百度</a>
        </div>
    )
}

export default Test

其实,我的本意很简单,就是a标签单纯的一个点击事件,但是吧,控制非得给我报这么一大段警告错误,简单来说就是它要求你必须提供一个有效的href属性。。。

所以,那我们就加上一个href属性,经过一段的测试,貌似发现只有 href = "#!" 可正常使用,浏览器控制台和命令行方才都正常。。。

<a href="#!" onClick={() => click()}>百度</a>

当然还有一个解决办法,我们把这个检测的插件给它关闭了,如下写法,找到项目的package.json文件,给它关闭了就好。

  "eslintConfig": {
    "extends": [
      "react-app",
      "react-app/jest"
    ],
    "rules": {
      "jsx-a11y/anchor-is-valid": "off"
    }
  },

这样,我们依然采用上方的写法不改即可。。。那么我们来看看官方是怎么解释的吧,为什么采用我们去提供一个有效的href属性

github:官方解释 ,无法进入的话,gitee上也有 gitee:官方解释,当然全部是英文的,我就直接一键翻译,可以依稀看到解释。

嗯,就是这样。。。 

 


http://lihuaxi.xjx100.cn/news/821439.html

相关文章

一篇掌握分布式锁

分布式锁理解 1.业务场景引入 在进行代码实现之前&#xff0c;我们先来看一个业务场景&#xff1a; 系统A是一个电商系统&#xff0c;目前是一台机器部署&#xff0c;系统中有一个用户下订单的接口&#xff0c;但是用户下订单之前一定要去检查一下库存&#xff0c;确保库存足…

一篇了解SSO单点登录

SSO基础 文章目录SSO基础1.什么是单点登录&#xff1f;2.回顾普通系统登录3.多系统登录的问题与解决&#xff1f;3.1.Session不共享问题XXL-SSO框架基础入门1.什么是XXL-SSO2.特性3. 官方Demo分析3.1 SSO Server中央认证服务3.2 SSO Client应用&#xff08;Cookie形式&#xff…

XSS Challenges

XSS 挑战 (由 yamagata21) - 阶段 #1 (int21h.jp) 题目要求注入 JavaScript 命令: alert(document.domain); Stage #1 输入321来定位代码的位置,发现是处于<b></b>标签之内,没有任何过滤 // 第一种方法是闭合 b 标签,插入 Script 标签 "</b> <…

《矩阵论》学习笔记

目录线性代数引论线性空间线性变换及矩阵Jordan标准型欧式空间和酉空间最小二乘法矩阵的分解三角分解QR分解正规矩阵及Schur分解满秩分解奇异值分解单纯矩阵的谱分解矩阵的广义逆广义逆矩阵广义逆矩阵AA^AAA^A的几种基本求法广义逆与线性方程组线性方程组的相容性、通解与A{1}A…

9 个视图子类、视图集、 路由系统、认证组件

目录1.9 个视图子类2 视图集2.1 通过ModelViewSet编写5个接口2.3 ViewSetMixin源码分析2.4 from rest_framework.viewsets包下的类2.5 视图层大总结3 路由系统3.1 自动生成路由3.2 action 装饰器4 认证组件4.1 登录接口4.2 认证功能4.3 全局使用4.4 局部使用 1.9 个视图子类 # …

【Leetcode】面试题 08.05. 递归乘法、HJ55 挑7

作者&#xff1a;小卢 专栏&#xff1a;《Leetcode》 喜欢的话&#xff1a;世间因为少年的挺身而出&#xff0c;而更加瑰丽。 ——《人民日报》 目录 面试题 08.05. 递归乘法 HJ55 挑7 面试题 08.05. 递归乘法 面试题 08.05. 递归乘法 题…

【LeetCode每日一题】【2023/2/6】2331. 计算布尔二叉树的值

文章目录2331. 计算布尔二叉树的值方法1&#xff1a;递归2331. 计算布尔二叉树的值 LeetCode: 2331. 计算布尔二叉树的值 简单\color{#00AF9B}{简单}简单 给你一棵 完整二叉树 的根&#xff0c;这棵树有以下特征&#xff1a; 叶子节点 要么值为 0 要么值为 1 &#xff0c;其中…

[ 2204阅读 ] 真题 - 6

Part 3 真题 Passage The Rise of Florence Paragraph 1 In the Central Middle Ages, starting around 1000 A.D., a number of northern Italian cities, including Venice and Genoa, rode a wave of economic and population growth that saw them become among the most…