【发布时间】:2021-03-31 06:17:53
【问题描述】:
假设我有以下场景:首先定义一个函数A,并在里面调用函数B;然后定义函数B并调用函数A。代码如下:
import { useState } from "react";
export default function App() {
const [action, setAction] = useState("walk");
const functionA = () => {
if (action === "walk") {
functionB();
}
setAction("run");
};
const functionB = () => {
if (action === "run") {
functionA();
}
setAction("walk");
};
return (
<div className="App">
<button onClick={functionA}>button A {action}</button>
<button onClick={functionB}>button B {action}</button>
</div>
);
}
先点击再点击第二个按钮看看效果。工作示例here。
代码运行良好,因为我使用setAction 确保不会发生循环。但是 ESLint 给了我错误:
'functionB' was used before it was defined.
我的代码有问题吗?我知道我可以禁用 ESLint 规则,但我很担心。
【问题讨论】:
-
const函数表达式不会像常规函数声明那样被提升。所以 linter 知道 -
如果是这样,为什么它仍然有效?我是否必须将箭头函数更改为普通函数定义才能避免这种情况?
-
它执行得很好,因为直到它们被定义后才会被调用
-
如何修复它取决于您。如果它们是常规声明,Linter 不应该抱怨,因为它们会被吊起。但是你必须做一些绑定才能在其中使用组件
this -
@charlietfl 你能在答案下面回答我的问题吗?
标签: javascript reactjs eslint