定义之前使用的React Function组件方法;这真的是个问题吗



大家好,

我有一个问题,我的同事们似乎没有达成一致。

考虑到JS提升和组件安装时不调用函数表达式,可以安全地假设我们不会因为声明方法违反"而出现任何问题;在定义之前使用";。

但我想知道忽略lint关于它的警告并按字母顺序或逻辑块或其他什么来声明组件的函数是否安全。。。?即使一个先声明的函数调用另一个后声明的函数?

例如(这只是一个具有大量功能的大型功能组件的简化,而另一个开发人员很难围绕这些功能进行组织(:

const SomeRandomFC = () => {
// User logics
const changeUser = id => {
if (id !=== currentId) {
getDatabase(id);
}
const getUser = id => ...
// Database logics
const getDatabase = user => [fetch logics];
const updateDatabase = id => ... 
}

谢谢!

抛开意见不谈,假设您有:

const a = () => {
b();
};
// a(); // <== Would fail
const b = () => {
// ...
};
a(); // <== Works

从";它工作吗;从长远来看,最后的调用很好,因为在调用发生时,b已经初始化。但是,如果您取消注释上面对a的第一个调用,它将失败,因为b尚未初始化。

你提到吊装。请注意,由于您使用的是分配给常量的函数表达式,而不是函数声明,因此只有常量的声明才会被提升,而不是该常量的初始化。相反,如果您有一个函数声明,则其绑定的声明和该绑定的初始化都将被提升:

function a() {
b();
}
a(); // <== Works
function b() {
// ...
}
a(); // <== Works

请注意,在第一个示例中可能失败的调用在第二个示例中起作用。

(请不要将此视为使用函数声明的建议。事实并非如此。我只是指出行为上的差异。(

无论是在函数表达式中使用常量还是在函数声明中使用常量,只要您不存在像上面第一个代码块中对a的注释外调用那样的情况,那么您布置函数的顺序取决于您和您的团队。

最新更新