为了账号安全,请及时绑定邮箱和手机立即绑定

React Click事件处理最佳实践

React Click事件处理最佳实践

郎朗坤 2019-04-25 22:19:49
学习React时,我看到人们处理事件的方式不同。处理点击事件的最佳做法是什么?这样好吗?将事件添加到要调用的类对象中?import React from "react";class Foo extends React.Component {   constructor(props) {     super(props);     this.state = {};     handleClick = handleClick.bind(this)   }   handleClick(){     //Do some stuff   }   render(){     return(       <div onClick={this.handleClick}>         Foo       </div>)   }}export default Foo;还是这样?要在渲染“部分”中声明函数import React from "react";class Bar extends React.Component {   constructor(props) {     super(props);     this.state = {};   }   render(){     const handleClick = () => {       //Do some stuff     }     return(       <div onClick={handleClick}>         Bar       </div>)   }}export default Bar;有没有更好的办法?哪种编码模式最好?
查看完整描述

3 回答

?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

官方文件反应使用:

...
    handleClick = handleClick.bind(this)...

但我认为,使用以下内容也更好:从“反应”中导入React;

class Bar extends React.Component {
  constructor(props) {
    super(props);
    this.state = {};
  }
  handleClick = () => {
    //Do some stuff
  }
  render(){
    return(
      <div onClick={this.handleClick}>
        Bar
      </div>)
  }}export default Bar;

使用第二种方法,您不必关心使用.bind()


查看完整回答
反对 回复 2019-05-17
?
德玛西亚99

TA贡献1770条经验 获得超3个赞

我没有看到你提到的第二种方式,并且不建议这样做,因为它将为每个渲染创建一个新函数。


我这样做的方式是这样的:


class Foo extends React.Component {

  constructor(props) {

    super(props);

    this.state = {};

  }


  handleClick = () => {

    //Do some stuff

  }


  render(){


    return(

      <div onClick={this.handleClick}>

        Foo

      </div>)

  }

}


export default Foo;

这样,您不需要构造函数中的绑定,但该函数仍然只创建一次。


查看完整回答
反对 回复 2019-05-17
?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

你的第一种方法,使用你在构造函数中绑定的原型函数,除了你缺少的东西之外是好的this

this.handleClick = this.handleClick.bind(this);

你的第二种方法是在每个渲染中创建一个新函数render。这使得handleClick为测试目的而难以模拟。

您经常看到的第三种方法涉及在构造函数中在构造时创建箭头函数:

this.handleClick = event => {
    // ...};

或使用财产声明:

class Bar extends React.Component {
    handleClick = event => {
        // ...
    };}

这些都具有相同的模拟/可测试性问题。

除此之外,他们没事。


查看完整回答
反对 回复 2019-05-17
  • 3 回答
  • 0 关注
  • 712 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号