警告:React 的未来版本将阻止 javascript

Warning: A future version of React will block javascript

我从 gitlab 克隆了 repo 并安装了依赖项然后当我从命令行键入 yarn next dev 我得到

index.js:1 Warning: A future version of React will block javascript: URLs as a security precaution. Use event handlers instead if you can. If you need to generate unsafe HTML try using dangerouslySetInnerHTML instead. React was passed "javascript:;" 

错误。在浏览器中,我在登录页面上收到错误 code 404。怎么了我怎么也过不去。

似乎在此代码中的某处有一个元素,其属性中某处带有显式 javascript 代码。类似于

<a href="javascript:;" ...>...</a>

如警告所述:React was passed "javascript:;"。这可能是一些旧的回购协议,它使用 this 来摆脱不指向任何地方的 <a> 标签。更常见的解决方案是使用 href='#'.

但是,您得到的 404 可能意味着更多的东西,并且回购协议本身可能已损坏。

您可以根据 a 元素定义组件。以下是一堆代码片段。

import React, { FC, MouseEvent } from 'react'
import classnames from 'classnames'

import './navigator.scss'

export interface INavigatorProps {
  className?: string
  prefixCls?: string
  style?: React.CSSProperties

  url: string

  onClick?: (event: MouseEvent<HTMLAnchorElement>) => void
}

export const Navigator: FC<INavigatorProps> = ({
  style,
  children,
  url: oldUrl,
  className = '',
  onClick: oldOnClick,
  prefixCls = 'pa-navigator',
}) => {
  const classNameString = classnames(className, prefixCls)

  let [url = oldUrl, onClick = oldOnClick] = []
  if (/^javascript:/.test(url) || url === '#') {
    // @ts-ignore
    url = undefined

    onClick = (event) => {
      event.stopPropagation()

      oldOnClick?.call(Object.create(null), event)
    }
  }

  return (
    <a
      href={url}
      style={style}
      className={classNameString}
      onClick={onClick}
      rel='noopener noreferrer'
    >
      {children}
    </a>
  )
}