为什么我会收到“意外使用‘位置’无限制全局变量”的消息?

bie*_*ier 9 javascript reactjs eslint react-router

在我的 reactjs 代码中,我得到了:

const {
  children,
  location: { pathname },
} = this.props;

let path = location.pathname;
Run Code Online (Sandbox Code Playgroud)

也在这个组件中使用 react 路由器模块。如何修复此错误?

agm*_*984 11

location.reload()例如,在大多数/所有 Web 浏览器中,是其完全限定名称的别名window.location.reload()

您可以通过打开开发工具窗格控制台并输入以下内容在浏览器中对其进行测试:

location.reload()
Run Code Online (Sandbox Code Playgroud)

window.location.reload()
Run Code Online (Sandbox Code Playgroud)

两者都会触发页面刷新。

ES Lint 警告有效地警告您,您的代码依赖此别名,因此将来代码可能会突然中断,这可能是因为别名已被弃用或您的工具链的某些部分以某种方式运行需要使用 window.

在 JavaScript 中,由于变量阴影和闭包,可能会发生奇怪的事情。可能location会在之后声明引用,然后对类似内容的引用location.reload()会因诸如“没有这种方法重新加载”之类的消息而中断。如果您调用完全限定名称,则这种情况不太可能发生window.location.reload()


Anh*_*yen 4

你应该尝试这个代码

const {
  children,
  location: { pathname },
} = this.props;

let path = pathname;
Run Code Online (Sandbox Code Playgroud)

您的location变量尚未在此块代码中定义,因此eslint认为您使用全局变量