学习如何在React应用程序中与事件互动

51 阅读2分钟

学习如何在React应用程序中与事件互动

React提供了一种简单的方法来管理事件。准备告别addEventListener

在之前关于状态的文章中,你看到了这个例子。

const CurrencySwitcher = props => {
  return (
    <button onClick={props.handleChangeCurrency}>
      Current currency is {props.currency}. Change it!
    </button>
  )
}

如果你已经使用了一段时间的JavaScript,这就像普通的JavaScript事件处理程序,只是这次你是在JavaScript中定义所有的东西,而不是在你的HTML中,而且你传递的是一个函数,而不是一个字符串。

实际的事件名称有点不同,因为在React中,你对所有东西都使用camelCase,所以onclick 变成onClickonsubmit 变成onSubmit

作为参考,这是混合了JavaScript事件的老式HTML。

<button onclick="handleChangeCurrency()">...</button>

事件处理程序

将事件处理程序定义为组件类的方法,这是一个惯例。

class Converter extends React.Component {
  handleChangeCurrency = event => {
    this.setState({ currency: this.state.currency === '€' ? '$' : '€' })
  }
}

所有的处理程序都会收到一个事件对象,该对象符合W3C UI Events规范的跨浏览器要求。

在方法中绑定this

不要忘记绑定方法。ES6类的方法默认是不绑定的。这意味着this ,除非你把方法定义为箭头函数。

class Converter extends React.Component {
  handleClick = e => {
    /* ... */
  }
  //...
}

当使用Babel的属性初始化语法时(在create-react-app 中默认启用),否则你需要在构造函数中手动绑定它。

class Converter extends React.Component {
  constructor(props) {
    super(props)
    this.handleClick = this.handleClick.bind(this)
  }
  handleClick(e) {}
}

事件参考

有很多事件被支持,这里是一个摘要列表。

剪贴板

  • onCopy
  • onCut
  • 粘贴时

组合

  • 合成结束
  • 合成开始
  • 更新构图

键盘

  • 按键
  • 按键
  • 按键上升

焦点

  • 焦点
  • 模糊

形状

  • 变化
  • 输入时
  • 提交

鼠标

  • 点击
  • 上下文菜单
  • 双击
  • 拖动
  • 拖动结束
  • 拖动进入
  • 拖动退出
  • 拖动离开
  • 拖动结束
  • 拖动开始
  • 下拉
  • 鼠标下移
  • 鼠标进入
  • 鼠标离开
  • 鼠标移动
  • 鼠标移出
  • 鼠标上
  • 鼠标向上

选择

  • 选择

触摸

  • 触摸取消
  • 触摸结束
  • 触摸移动
  • 触摸开始

用户界面

  • 滚动

鼠标滚轮

  • 轮子

媒体

  • 暂停
  • 可以播放
  • 可以穿越播放
  • 时间改变
  • 暂停播放
  • 加密
  • 结束
  • 错误
  • 装载的数据
  • 已加载的元数据(onLoadedMetadata
  • 在加载开始时
  • 暂停
  • 播放
  • 播放中
  • 进展中
  • 速率变化
  • 寻找中
  • 寻找中
  • 搁置
  • 暂停
  • 时间更新
  • 销量变化时
  • 等待中

图片

  • 加载时
  • 错误时

动画

  • 动画开始时
  • 动画结束
  • 动画迭代

过渡

  • 转场结束