【问题标题】:Arrow function should not return assignment no-return-assign箭头函数不应返回赋值 no-return-assign
【发布时间】:2019-05-03 17:53:14
【问题描述】:

我的代码在应用程序中正常运行,但是在提交 husky 运行并给出错误说“箭头函数不应该返回赋值 no-return-assign”

           <Field name='dob' label='dateOfBirth'
              placeholder=''
              onFocus={(e) => e.target.placeholder = 'MM/YYYY/DD'}
            />

【问题讨论】:

  • 只需将函数体括在括号中即可。 (e) =&gt; {e.target.placeholder = 'MM/YYYY/DD'}
  • 您应该在返回的内容周围加上花括号,而不是返回作业 onFocus={(e) => {e.target.placeholder = 'MM/YYYY/DD'}}
  • 如果没有大括号,箭头函数会隐式返回,这就是您看到该错误的原因
  • 谢谢你们,它奏效了……很快

标签: javascript react-redux redux-form


【解决方案1】:

正如几个人在 cmets 中提到的,问题在于您正在使用

(e) => e.target.placeholder = 'MM/YYYY/DD'

大致相当于

anon_func = function (e) {
    return e.target.placeholder = 'MM/YYYY/DD';
}

因为(args) =&gt; &lt;expression&gt; 表示对表达式求值并返回结果。

与 jakemingolla 的回答相反,这合法的;它返回 'MM/YYYY'DD' 在这种情况下无关紧要,因为您不关心任何返回值。这就是它“起作用”的原因。但它通常被认为是糟糕的风格,这就是为什么你的预提交检查会标记它。

你想要的是(args) =&gt; {&lt;function-body&gt;},如果你没有明确地返回一些东西,它(就像任何直接声明的函数体一样)只会返回 undefined 。那是

(e) => {e.target.placeholder = 'MM/YYYY/DD';}

大致是这样的

anon_func = function (e) {
    e.target.placeholder = 'MM/YYYY/DD';
}

这就是你想要的。

【讨论】:

  • > 与 jakemingolla 的回答相反,这是合法的;它返回 'MM/YYYY'DD' 在这种情况下无关紧要,因为您不关心任何返回值。这就是它“起作用”的原因。但它通常被认为是糟糕的风格,这就是为什么你的预提交检查会标记它。我不太确定我的回答是否暗示它是非法的 - 你的回答也没有解释为什么编译器在表示“糟糕的风格”之外与之匹配
  • @jakemingolla - “编译器警告您正在返回分配,这是不允许的”。所以是的,你没有暗示这是非法的;你是这样的。此外,样式警告没有被编译器标记(没有涉及),并且“糟糕的样式”它被标记的原因。因此,如果您正在寻找“在表示‘糟糕风格’之外”的原因,那么您需要调整您的期望。
【解决方案2】:

如果您在箭头函数中省略括号,它将隐式返回语句。在这种情况下,编译器会警告您正在返回分配,这是不允许的(我猜是为了避免您尝试检查相等性并错误地只键入一个 = 而不是 @987654323 @)

您可以将函数体用括号括起来以避免此问题:

onFocus={(e) => { e.target.placeholder = 'MM/YYYY/DD'} }

查看MDN 了解有关箭头函数的更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-30
    • 2018-07-02
    • 2021-06-17
    • 2019-10-21
    • 1970-01-01
    • 2020-10-26
    • 2023-03-19
    • 1970-01-01
    相关资源
    最近更新 更多