react中的_是干嘛用的

例如我要监听滚动条,然后当滚动到一定位置时,console.log输出一些内容,看到有种写法是这样的:

scrollHandler = this.handleScroll.bind(this);

componentDidMount(){
  window.addEventListener('scroll', this.scrollHandler)
}

_handleScroll(scrollTop){
  if(scrollTop > 100){
    console.log(123);
  }
}

handleScroll(event){
    let scrollTop = event.srcElement.body.scrollTop;  
    let screenHeight = window.screen.height;  
    this._handleScroll(scrollTop);
}

componentWillUnmount() {
        window.removeEventListener('scroll', this.scrollHandler);
    }
    

1.直接把_handleScroll里面的操作放到handleScroll里也可以啊,为什么还要这样额外弄个方法出来,我只知道_能表示定义一些临时变量,那放在这里又是什么意思呢?

2.什么时候才需要用到 _ 这个?好处是什么?这样不会稍微增加了代码量吗?

阅读 7.4k
12 个回答

1、放在里面都是可以的。不是唯一。
2、下划线开头表示内部方法。表示这个方法只供内部使用。约定俗成。

handleScroll负责解析事件参数,_handleScroll负责业务逻辑,解耦了。

这是个人编程习惯问题,不需要过多解读

个人编程习惯哈。

相当于在模拟private

其实就是一种命名约定,在自己的所有程序中,用_开头的方法来表示私有方法。

表示私有属性和方法

变量前缀 _ 代表私有方法/属性 约定俗称而已,不容易冲突

这只是一种方法命名方式而已,不用在意的。一般会使用_开头的方法或属性表示私有方法或属性。

_表示独有的方法,没有特殊的语法意义

可写可不写,写的话容易区分私有方法及属性

这是面向对象的编程语言里比较经典的私有方法定义约定
由于原生的 JS 不支持 private 等修饰符(更别说不支持类的 ES5 及以前了),因此用这种方式来从代码的角度入手来帮助理解一些方法功能及方法间的关系。
比如:

class a {
  _say() { alert('Only a should call me') }
express() { alert('Any one extends from a or a itself can call me') }
}
  1. 不将_handleScroll直接写在handleScroll是为了解耦

    @慢慢说别着急 所说, 业务和视图分离,handleScroll负责view事件处理,_handleScroll负责业务逻辑。最简洁的举个栗子就是,可能除了事件方式触发_handleScroll业务,还有其他方式,这时候就可以复用该业务了。

  2. _纯粹是的编程习惯,标明这是私有变量或者方法。

解耦,可以提高代码的可重用性,至于前面的_,一般是看个人习惯吧。其实说白了,他就是个变量。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题