另外一篇总结:react 中的事件绑定2019-05-16 更新

  建议:在了解 js 的 this 取值后食用更佳。

 

一、react 与 Html 中用法的异同和注意点

  html 中的绑定事件的写法:

<button onclick="activateLasers()">  // onClick = "xxxx()"
    激活按钮
</button>

  react 中的写法:

<button onClick={activateLasers}>  // onclick = { xxxx }
     激活按钮
</button>

 

  在 React 中另一个不同是你不能使用返回 false 的方式阻止默认行为, 必须明确的使用 preventDefault。

  例如,通常我们在 HTML 中阻止链接默认打开一个新页面,可以这样写:

<a href="#" onclick="console.log('点击链接'); return false">  // return false
    点我
</a>

 

  但是,在 react 中,阻止默认行为必须得用下面的方式:

function ActionLink() {
  function handleClick(e) {
    e.preventDefault();    // preventDefault()
    console.log('链接被点击');
  }
 
  return (
    <a href="#" onClick={handleClick}>
      点我
    </a>
  );
}

  

  同样,使用 React 的时候通常不需要使用 addEventListener 为一个已创建的 DOM 元素添加监听器。只需要在这个元素初始渲染的时候提供一个监听器。

 

二、绑定事件处理函数

  首先一个例子:

class Toggle extends React.Component {
  constructor(props) {
    super(props);
    this.state = {isToggleOn: true};
 
    // 这边绑定是必要的,这样 `this` 才能在回调函数中使用
// 这是其中的一种写法 this.handleClick = this.handleClick.bind(this); } handleClick() { this.setState(prevState => ({ // prevState 会在后面关于 setState 中详细介绍 isToggleOn: !prevState.isToggleOn })); } render() { return ( <button onClick={this.handleClick}> {this.state.isToggleOn ? 'ON' : 'OFF'} </button> ); } } ReactDOM.render( <Toggle />, document.getElementById('example') );

   为什么需要这样写?

  我的看法是和 this、 bind() 以及 函数的执行符号 有关。函数执行的符号是 "()"。

1 1.为什么在之前的组件案例(入坑笔记(二)的 Clock 组件)中的 tick 方法不需要绑定?
一些疑问

相关文章: