【问题标题】:Should I be using _myMethod for functional components?我应该将 _myMethod 用于功能组件吗?
【发布时间】:2019-06-23 06:59:05
【问题描述】:

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

但是函数式组件内部函数已经是私有的,在组件之外是不可访问的,对吧?

例子:


function MyComponent({ propOne }) {

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

【问题讨论】:

  • 这只是命名约定
  • 在使用命名约定时匹配易于阅读和理解的代码。所以调用_getData()方法意味着这个方法不是全局的,肯定是本地放在这个Component里面的

标签: reactjs react-hooks


【解决方案1】:

Airbnb React/JSX 样式指南 (version 2019.05.24) 实际上警告说,这是一种命名约定:

  • 不要在 React 的内部方法中使用下划线前缀 组件。

为什么?下划线前缀有时在其他语言中用作表示隐私的约定。但是,与那些语言不同的是,JavaScript 没有对隐私的原生支持,一切都是公开的。无论您的意图如何,为您的属性添加下划线前缀实际上并不会使它们成为私有,并且任何属性(是否带下划线前缀)都应被视为公共的。请参阅问题#1024#490 进行更深入的讨论。

简而言之:

  • underscore 表示 private 方法是从其他语言借用的。
  • 它不会改变方法本身。
  • 这是为了表明该方法旨在为private 并阻止其使用。

是否遵守约定由您决定。没必要。如果您遵循上面引用的样式指南,则不应该这样做。但是,这也取决于您为/与您一起工作的人,例如。 G。如果公司使用带有前导下划线的样式指南来表示private 属性。


另一种语言 - Python 中的此约定示例。来自Naming Convention

_single_leading_underscore

此约定用于声明私有变量、函数、方法和类。

【讨论】:

  • 啊,我明白了。然后从其他语言借来的许多位中的一个! Javascript 就是这样一个杂种。
【解决方案2】:

_functionName 并不意味着私有,它只是一个最佳实践。

如果有兴趣编写自定义钩子反应文档建议在钩子名称前添加“use”前缀例如:useCustomeHook https://reactjs.org/docs/hooks-custom.html

Functional 组件是一个很小的函数,它只接受 props 并在 ReactJs 中返回 HTML。

【讨论】:

    【解决方案3】:

    正如 Jeanne Dark 所说,这只是一个命名约定。当然,如何键入代码取决于您,但我不建议使用下划线前缀,因为您可以自己看到该函数是私有的,没有下划线。

    您可以在 W3 schools 上阅读有关 JS 命名约定的信息,或者更值得信赖的是 googles JavaScript style guide

    【讨论】:

      猜你喜欢
      • 2020-05-07
      • 2021-01-27
      • 2018-05-26
      • 2017-07-18
      • 1970-01-01
      • 2017-09-22
      • 1970-01-01
      • 2011-11-15
      • 2011-02-07
      相关资源
      最近更新 更多