javascript - Create React App 出现 "Unexpected labeled statement"警告

标签 javascript reactjs eslint arrow-functions create-react-app

我将如何修复这 block 与 Firebase 相关的代码,以符合 CRA 的 ESLint 规则:

db.broadcasts.on('child_added', (snap) => {
    this.setState((prevState) => {
        broadcasts: prevState.broadcasts.push(snap)
    });
});

以下是相关错误:enter image description here

我试过了 allowing loops :

/*eslint no-labels: ["error", { "allowLoop": true }]*/

但这给了我以下错误:

error    Unexpected labeled statement 

谢谢

最佳答案

此规则在您的代码中发现了一个错误。
您需要修复错误,而不是绕过规则。

这部分被解析为带标签的语句:

this.setState((prevState) => {
    broadcasts: prevState.broadcasts.push(snap)
});

所以浏览器会看到这个:

this.setState(function(prevState) {
    broadcasts: // A label, like in switch() statement
      prevState.broadcasts.push(snap);
    // This function doesn't return anything
});

这里有两个问题:

1) 不要改变 prevState 这不是 React 状态的工作方式。您需要返回下一个状态,而不是就地改变它。

2) 你没有正确使用 ES6 箭头函数。 如果要隐式返回对象,必须将其放在括号中。否则浏览器会将其解析为带标签的语句。这就是为什么您会收到有关标签的令人困惑的消息。

所以,正确的版本应该是这样的:

this.setState((prevState) => ({ // Note this paren! It is essential.
    broadcasts: prevState.broadcasts.concat([snap]) // Note lack of mutation!
}));

了解更多关于 why immutability is important 的信息关于returning object literals from arrow functions .

关于javascript - Create React App 出现 "Unexpected labeled statement"警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43993719/

相关文章:

javascript - jQuery 验证不适用于 Web 表单

javascript - 使用 javascript 查找搜索词(片段)周围的单词

javascript - 如何获取CSS网格中的所有元素(包括隐藏元素)

javascript - TypeScript - 如何防止使用构造函数中的变量覆盖类方法

javascript - 在 Leaflet 中访问标记图标的 HTMLElement

javascript - 在打开页面时显示从 firebase 到页面的值

javascript - 我如何在 React Router DOM v6 上使用 MemoryRouter 测试位置?

javascript - 类型 <void> 上不存在属性 `data` | AxiosHttpResponse<任何>

reactjs - 警告 jsx-a11y/img-has-alt

reactjs - 在非弹出的 create-react-app 中覆盖 eslint 设置?