【问题标题】:ES2016 default parameter as empty array causes "no-empty-pattern" warningES2016 默认参数为空数组导致“no-empty-pattern”警告
【发布时间】:2020-05-04 16:00:09
【问题描述】:

我正在构建一个 React 应用程序,我使用 Create React App 作为构建环境。在我的(基于类的)组件之一中,componentDidUpdate() 方法中有以下行:

const toast = ([] = this.props.toast.toast);

如果我的理解是正确的,这是 ES2016 语法,用于在未定义变量的情况下设置默认值。 (如果这不正确,请告诉我,虽然这不是这个问题的主要观点)。

当我的 React 应用程序呈现时,我在控制台中收到以下警告:Unexpected empty array pattern no-empty-pattern

我知道 ESLint “抱怨”它是一个空数组这一事实。但是在那种情况下我想要一个空数组,为什么会导致警告?

我可以简单地告诉 ESLint 忽略它吗(使用 // eslint-disable-line no-empty-pattern)?

【问题讨论】:

标签: javascript reactjs eslint


【解决方案1】:

这根本不是你认为它在做的事情。它没有为空数组设置任何内容,也不是默认变量的语法。它正在做的是滥用数组解构语法而没有好处。自己试试看:如果你执行这段代码,toast 的值将是未定义的:

const toast = ([] = undefined);

据我所知,除了默认函数参数之外,默认变量没有ES6语法,这与您使用的完全不同。如果您想要默认变量值,只需使用久经考验的短路方法:

const toast = this.props.toast.toast || [];

详细来说,正确的数组解构是这样的(假设 this.props.toast.toast 是一个数组):

const [first, second, third] = this.props.toast.toast;
first === this.props.toast.toast[0]; // true
second === this.props.toast.toast[1]; // true
third === this.props.toast.toast[2]; // true

【讨论】:

  • 注意,在解构语法之前没有const(或let),它会创建全局变量。
  • @EmileBergeron 是的,有目共睹!这就是我在示例中过快地编辑所得到的 :) 我已经修复了它。谢谢!
猜你喜欢
  • 2014-11-25
  • 1970-01-01
  • 2019-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-27
  • 1970-01-01
  • 2020-10-30
相关资源
最近更新 更多