最近我在博客上看到了很多例子,其中React功能组件中的方法都带有下划线。我还在基于类的组件中看到了这一点,并被告知这意味着它们是私有的(?)
但是功能组件内部功能已经是私有的,无法在组件外部访问,对吧?
示例:
function MyComponent({ propOne }) {
const _getData() {
/// why does this have an _underscore on it?
}
return (
<div>a div</div>
)
}
答案 0 :(得分:4)
Airbnb React / JSX样式指南(version 2019.05.24)实际上警告以下命名约定:
- 请勿在React的内部方法中使用下划线前缀 组件。
为什么?下划线前缀有时在其他语言中用作约定,以表示隐私。但是,与那些语言不同,JavaScript没有对隐私的本地支持,所有内容都是公共的。无论您的意图是什么,在属性中添加下划线前缀实际上并不会使它们变为私有,并且任何属性(带或不带下划线前缀的属性)都应视为公开属性。有关更深入的讨论,请参见问题#1024和#490。
简而言之:
underscore
方法的private
是从其他语言中借来的。private
,并禁止使用。由您决定是否遵守约定。没必要如果遵循上面引用的样式指南,则不应该这样做。但是,这也取决于您与之共事的人,例如e。 G。如果公司使用带有下划线的样式指南来表示private
属性。
该约定的另一种语言示例-Python。来自Naming Convention:
_single_leading_underscore
此约定用于声明私有变量,函数,方法和类。
答案 1 :(得分:0)
_functionName 并不意味着私有,它只是一种最佳实践。
如果对编写自定义钩子反应文档感兴趣,建议在钩子名称前加上“use”前缀,例如:useCustomeHook https://reactjs.org/docs/hooks-custom.html
函数式组件是一个很小的函数,它在 ReactJs 中只接受 props 并返回 HTML。
答案 2 :(得分:0)
正如珍妮·达克所说,这只是一个命名约定。当然,如何键入代码取决于您,但我不建议使用下划线前缀,因为您可以亲眼看到该函数是私有的,没有下划线。
您可以在 W3 schools 或更值得信赖的 googles JavaScript style guide 上阅读有关 JS 命名约定的信息。