我应该对功能组件使用_myMethod吗?

时间:2019-06-23 06:59:05

标签: reactjs react-hooks

最近我在博客上看到了很多例子,其中React功能组件中的方法都带有下划线。我还在基于类的组件中看到了这一点,并被告知这意味着它们是私有的(?)

但是功能组件内部功能已经是私有的,无法在组件外部访问,对吧?

示例:


function MyComponent({ propOne }) {

   const _getData() {
      /// why does this have an _underscore on it?
   }
   return (
        <div>a div</div>
    )
}

3 个答案:

答案 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 命名约定的信息。