美文网首页
处理事件

处理事件

作者: ZMJun | 来源:发表于2017-06-27 23:13 被阅读21次

本文是本人自己辛苦翻译的,请转载的朋友注明,翻译于Z.MJun的简书 ,感谢!<翻译不容易啊>


翻译于2017年6月26日,原文


处理事件的React元素,与DOM元素处理事件相似。

  • React 事件使用驼峰式命名,不要使用全小写。
  • 使用JSX来传一个事件执行函数,不要使用字符串。
    HTML的样式如下:
<button onclick="activateLasers()">
  Activate Lasers
</button>

在React使用以下方法

<button onClick={activateLasers}>
  Activate Lasers
</button>

另一个不同点,在react中不能使用返回false。必须调用preventDefault。Html如下:

<a href="#" onclick="console.log('The link was clicked.'); return false">
  Click me
</a>

React如下:

function ActionLink() {
  function handleClick(e) {
    e.preventDefault();
    console.log('The link was clicked.');
  }

  return (
    <a href="#" onClick={handleClick}>
      Click me
    </a>
  );
}

这里的e是一个虚拟的事件。React定义的这些虚拟的事件满足W3C spec。所以不需要担心浏览器兼容问题。想了解更多查看SyntheticEvent

当使用React的时候,不需要如DOM元素调用addEventListener方法添加监听者。只需要,在初始化渲染的时候提供一个监听者。

当使用ES6类来定义一个组件,常见的模式是将事件处理程序作为类中的一个方法。如,Toggle组件渲染一个按键,会让用户切换ON或者OFF状态:

class Toggle extends React.Component {
  constructor(props) {
    super(props);
    this.state = {isToggleOn: true};

    // This binding is necessary to make `this` work in the callback
    this.handleClick = this.handleClick.bind(this);
  }

  handleClick() {
    this.setState(prevState => ({
      isToggleOn: !prevState.isToggleOn
    }));
  }

  render() {
    return (
      <button onClick={this.handleClick}>
        {this.state.isToggleOn ? 'ON' : 'OFF'}
      </button>
    );
  }
}

ReactDOM.render(
  <Toggle />,
  document.getElementById('root')
);

Try it on CodePen.
在JSX的回调,this的含义需要反复理解。在JS里面,类方法中没有默认绑定。如果你忘记了绑定this.handleClick,和点击onClickthis将会警告未定义。

这个并不是React特有的行为。这是JS的函数的一部分。一般来说,如果你是一个没有()方法后,如onclick = {this.handleclick },你应该绑定方法。

可以使用以下两个方法来绑定时间。如果使用初始化绑定(property initializer syntax),可以使用初始化的属性来绑定回调方法。

class LoggingButton extends React.Component {
  // This syntax ensures `this` is bound within handleClick.
  // Warning: this is *experimental* syntax.
  handleClick = () => {
    console.log('this is:', this);
  }

  render() {
    return (
      <button onClick={this.handleClick}>
        Click me
      </button>
    );
  }
}

这个语法是默认能用在Create React App下的。
如果你不想使用这个方法,还可以使用回调中动态加载方法。

class LoggingButton extends React.Component {
  handleClick() {
    console.log('this is:', this);
  }

  render() {
    // This syntax ensures `this` is bound within handleClick
    return (
      <button onClick={(e) => this.handleClick(e)}>
        Click me
      </button>
    );
  }
}

这个语法问题,不同的回调被创建每个时间点来表达LoggingButton。多数情况下,都可以的。但是,如果这个回调是要穿个低级的组件,这些组件就需要创建额外的重新渲染。比较推荐在constructor绑定或者使用初始化定义,来避免这个实现问题。

相关文章

  • JS 事件

    目录 事件流 事件处理程序HTML事件处理程序DOM0级事件处理程序DOM2级事件处理程序IE事件处理程序跨浏览器...

  • react事件处理

    一,事件处理 写法:on+事件名称= {事件处理函数} 类组件触发写法on+事件名称 = 事件处理函数 ---...

  • 跨浏览器的事件处理程序

    事件处理程序有DOM0级事件处理程序、DOM2级事件处理程序,IE事件处理程序,DOM0级事件处理程序具有简单,跨...

  • App事件中心

    App事件中心,事件的的生产端和处理端分离,事件处理结果广播通知,事件状态(初始化、处理中和处理完成)管理,事件类...

  • Chapter 07. Broadcast

    阅读原文 7.1 . 理论概述 广播事件处理属于系统级的事件处理(一般事件处理是属于View级的事件处理) 一个应...

  • iOS和Flutter里的事件处理

    目录先说一下事件处理里的被处理者:事件一、iOS里的事件二、Flutter里的事件然后说一下事件处理里的处理者:响...

  • react文档——事件处理

    事件处理 React 元素的事件处理和 DOM 元素的事件处理非常相似。但也有一些语法差异: React 事件使用...

  • DOM事件的问题!

    1.事件冒泡 2.事件捕获 事件处理程序 1.HTML事件处理程序 2.DOM 0级事件处理程序 3.DOM 2级...

  • 2021-09-22 GUI(事件监听机制)

    事件监听机制组成事件源(组件)事件(Event)监听器(Listener)事件处理(引发事件后处理方式) 事件监听...

  • attachEvent和addEventListener区别

    attachEvent是IE的事件处理方法,是DOM0事件处理程序,只能在事件冒泡阶段触发。接收两个参数,事件处理...

网友评论

      本文标题:处理事件

      本文链接:https://www.haomeiwen.com/subject/bqfycxtx.html