`

ReactJS - 05 - ReactJS之入门之03之事件 Event 处理

阅读更多
ReactJS - 05 - ReactJS之入门之03之事件 Event 处理

一、事件处理代码(写法一):
<script type="text/babel">

class Toggle extends React.Component {

    constructor(props) {
        super(props);
        this.state = { isToggleOn: true };
    }

    //使用箭头函数使当前的 this 对象绑定进函数中。
    handleClick = () => {
        this.setState({
            isToggleOn: !this.state.isToggleOn
        });
    }

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

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

</script>



二、事件处理代码(写法二):

<script type="text/babel">
//
//
// 1. 如果 handleClick 不是箭头函数(即:具有单独的this 作用域),
// 2. 则需要绑定当前的 this 对象给 handleClick 函数
//
//


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

	//2. 则需要绑定当前的 this 对象给 handleClick 函数
    this.handleClick = this.handleClick.bind(this);
  }

  // 1. 如果 handleClick 不是箭头函数(即:具有单独的this 作用域),
  handleClick() {
    this.setState({
       isToggleOn: !this.state.isToggleOn
    });
  }

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

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






三、事件处理代码(写法三):

当需要向 onClick 函数传递参数时,需要以下写法:

创建一个新的 arrow 回调函数,以绑定 this,并传参。


注意:
使用本写法有个问题就是每次 Toggle 渲染的时候都会创建一个新的回调函数。
如果不向 onClick 函数 传参,请避免使用本写法。


1、组件内部:传参
<button onClick={(e) => this.deleteRow(id, e)}>Delete Row</button>
<button onClick={this.deleteRow.bind(this, id)}>Delete Row</button>

    参数 e 作为 React 事件对象将会被作为第二个参数进行传递。
deleteRow(id, e){    //事件对象e要放在最后
    e.preventDefault();
    alert(id);
}


2、组件嵌套:props 传参
function Square(props) {  
  return (
      <button className="square" 
         onClick={props.onClick}>  
                 {props.value}  
      </button>  
  );  
}  
  
class Board extends React.Component {  
    
  renderSquare(i) {  
    return (  
      // 创建一个新的 arrow 回调函数,以绑定 this,并传参。
      <Square value={this.props.squares[i]}  
              onClick={() => this.props.onClick(i)}  
       />  
    );  
  }  
  
  render() {  
    return (  
      <div>  
        <div className="board-row">  
          {this.renderSquare(0)}  
          {this.renderSquare(1)}  
          {this.renderSquare(2)}  
        </div>
      </div>  
    );  
  }  
}  




3、例子
<script type="text/babel">
class Toggle extends React.Component {
  constructor(props) {
    super(props);
    this.state = {isToggleOn: true};
  }

  // 1. 如果 handleClick 不是箭头函数(即:具有单独的this 作用域),
  handleClick() {
    this.setState({
       isToggleOn: !this.state.isToggleOn
    });
  }

  render() {
    return (
      //2. 在这里写一个新的箭头函数,把当前的 this 对象绑定进去,并传参。
      // 注意:这里没有传参,请使用上面的两种写法。
      <button onClick={ () => { this.handleClick() }}>
        { this.state.isToggleOn ? 'ON' : 'OFF' }
      </button>
    );
  }
}

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





引用:

https://reactjs.org/docs/handling-events.html


在线演示






转载请注明,
原文出处:http://lixh1986.iteye.com/blog/2429536




















-



分享到:
评论

相关推荐

    前端项目-event-source-polyfill.zip

    `event-source-polyfill`的工作原理是,它监听`XMLHttpRequest`或`fetch`的完成事件,然后模拟EventSource的API,将接收到的数据分发给客户端。通过这种方式,即使在没有原生EventSource支持的环境下,开发者也可以...

    hystrix-metrics-event-stream-1.5.18.jar

    hystrix-metrics-event-stream-1.5.18.jarhystrix-metrics-event-stream-1.5.18.jar

    reactjs-advanced-wheel-carousel

    React提供事件处理机制,将DOM事件与JavaScript函数关联起来。例如,`onClick`和`onTouchStart`/`onTouchEnd`事件可以用来处理轮播图的点击和滑动。 6. **Infinite Scrolling(无限循环)**:为了提供更好的用户...

    reactjs-burger-builder

    ReactJS提供了内建的事件处理机制,允许我们在组件的函数中处理这些事件。例如,通过`onClick`事件,我们可以增加或减少配料的数量。 4. 路由(Routing):如果项目规模扩大,可能需要考虑页面间的导航。React ...

    event-B入门基础手册

    ### Event-B入门基础手册知识点概览 #### 一、Event-B简介与背景 - **定义**:Event-B是一种形式化的方法,主要用于系统建模与设计,特别强调在软件工程领域中的应用。它提供了一套完整的工具和技术来支持系统的...

    ignite-reactjs-02-gpmoney

    3. 表单处理:掌握如何处理表单提交和输入事件,如`onChange`、`onSubmit`,以及如何使用`event.preventDefault()`来阻止默认表单行为。 4. 控制式组件和非控制式组件:对比两种表单组件的实现方式,并了解何时选择...

    shiro-event-1.4.0-API文档-中文版.zip

    赠送jar包:shiro-event-1.4.0.jar; 赠送原API文档:shiro-event-1.4.0-javadoc.jar; 赠送源代码:shiro-event-1.4.0-sources.jar; 赠送Maven依赖信息文件:shiro-event-1.4.0.pom; 包含翻译后的API文档:shiro-...

    shiro-event-1.4.0-API文档-中英对照版.zip

    赠送jar包:shiro-event-1.4.0.jar; 赠送原API文档:shiro-event-1.4.0-javadoc.jar; 赠送源代码:shiro-event-1.4.0-sources.jar; 赠送Maven依赖信息文件:shiro-event-1.4.0.pom; 包含翻译后的API文档:shiro-...

    reactjs-refactoring-classes-ts:移民

    在这个重构过程中,我们还需要为事件处理函数添加类型。例如,`increment`函数的类型可以被定义为`(event: React.MouseEvent) =&gt; void`。 在实际项目中,`reactjs-refactoring-classes-ts-master`这个压缩包可能...

    device-mapper-event-libs-1.02.74-10.el6.i686.rpm

    device-mapper-event-libs-1.02.74-10.el6.i686.rpm

    nosferatu-reactjs-auth:React.js登录表单

    4. **提交处理**:当用户点击登录按钮时,使用`event.preventDefault()`防止页面刷新,然后调用处理登录请求的函数。此函数应向后端发送POST请求,携带用户名和密码。 5. **错误处理**:如果登录失败,应该显示错误...

    Event-B.pdf

    与传统的B方法相比,Event-B通过引入事件和不变量等概念,更加侧重于系统的动态行为分析,从而能够更好地支持系统的逐步精化和验证过程。 #### 二、Event-B的特点 1. **逐步精化(Refinement)**: Event-B的核心...

    learning-reactjs-first-demo

    Material-UI 是一个 CSS 框架和一组实现规范的组件。 查看我们的以获取实时... React点击事件插件一些组件使用react-tap-event-plugin来监听触摸事件。 这种依赖是暂时的,一旦 react v1.0 发布就会消失。 在此之前,

    device-mapper-event-1.02.170-6.el7.x86_64.rpm

    docker离线安装所需包,需要的拿去吧

    前端开源库-event-emitter-mixin

    通过这样的方式,"event-emitter-mixin"使得在前端开发中处理事件变得更加方便和灵活。它简化了事件管理的代码,提高了代码的可读性和可维护性,同时也降低了因事件处理不当导致的错误。在实际项目中,合理利用这种...

    Event-B学习入门

    ### Event-B 学习入门详解 #### 一、书籍概览与系统建模设计 《Event-B学习入门》是一本由肯·罗宾逊编写的关于Event-B的入门书籍,首次发布于2007年7月,并在2010年10月进行了最后一次更新。本书主要介绍了如何...

    event-collector-1.12.zip

    总结来说,"event-collector-1.12.zip"是一个专注于事件收集的开源项目,它提供了强大的数据收集和处理能力,适用于多种IT场景。通过理解和掌握这个项目,开发者可以提升自己在数据处理领域的专业技能,同时也能为...

    Javascript中的事件--Event对象

    在JavaScript编程语言中,事件处理是其核心特性之一,它允许网页对用户的操作或浏览器的行为做出响应。事件处理的核心在于`Event`对象,这个对象包含了与事件相关的信息,如事件类型、触发事件的元素等。下面我们将...

Global site tag (gtag.js) - Google Analytics