• 5、ReactJs基础知识05--事件处理


    react事件和原生HTML的区别:

          1、React 事件的命名采用小驼峰式(camelCase),而不是纯小写。(例如onClick="")
          2、使用 JSX 语法时你需要传入一个函数作为事件处理函数,而不是一个字符串。(例如onClick={activateLasers})
          3、在 React 中另一个不同点是你不能通过返回 false 的方式阻止默认行为。你必须显式的使用 preventDefault 
    function ActionLink() {
      function handleClick(e) {
        e.preventDefault();
        console.log('The link was clicked.');
      }
    
      return (
        <a href="#" onClick={handleClick}>
          Click me
        </a>
      );
    }
          4、class 的方法默认不会绑定 this,所以需要手动绑定class中的方法到this上,为了在回调中使用 `this`,这个绑定是必不可少的
      这并不是 React 特有的行为;这其实与 JavaScript 函数工作原理有关。通常情况下,如果你没有在方法后面添加 (),例如 onClick={this.handleClick},你应该为这个方法绑定 this。
        解决方法:
          1)使用bind绑定this
    class Toggle extends React.Component {
        constructor(props) {
            super(props);
            this.state = {isToggleOn: true};
    
            // 为了在回调中使用 `this`,这个绑定是必不可少的
            this.handleClick = this.handleClick.bind(this);
        }
    
        handleClick() {
            this.setState(state => ({
                isToggleOn: !state.isToggleOn
            }));
        }
    
        render() {
            return (
              <button onClick={this.handleClick}>
                {this.state.isToggleOn ? 'ON' : 'OFF'}
            </button>
          );
        }
    }
    
    ReactDOM.render(
      <Toggle />,
        document.getElementById('root')
    );
          2)class fields语法
    class Toggle extends React.Component {
        constructor(props) {
            super(props);
            this.state = {isToggleOn: true};
        }
      //class fields语法
        handleClick = () => {
            this.setState(state => ({
                isToggleOn: !state.isToggleOn
            }));
        }
    
        render() {
            return (
                <button onClick={this.handleClick}>
                {this.state.isToggleOn ? 'ON' : 'OFF'}
            </button>
          );
        }
    }
    
    ReactDOM.render(
      <Toggle />,
        document.getElementById('root')
    );
          3)在回调中使用箭头函数
    class Toggle extends React.Component {
        constructor(props) {
            super(props);
            this.state = {isToggleOn: true};
        }
    
        handleClick() {
            this.setState(state => ({
                isToggleOn: !state.isToggleOn
            }));
        }
    
        render() {
            return (
                <button onClick={(e) => this.handleClick(e)}>
                {this.state.isToggleOn ? 'ON' : 'OFF'}
            </button>
          );
        }
    }
    
    ReactDOM.render(
      <Toggle />,
        document.getElementById('root')
    );
    注意:语法3中回调函数作为props传入子组件时,这些组件可能会额外重新渲染,所以我们建议使用1、2语法来避免出现性能问题
      5、向事件处理程序传递参数
    <button onClick={(e) => this.deleteRow(id, e)}>Delete Row</button>
    <button onClick={this.deleteRow.bind(this, id)}>Delete Row</button>
     
  • 相关阅读:
    【数据结构】算法 Invert Binary Tree 翻转二叉树
    雪碧图
    闭包
    正则那些事
    JS添加,删除表格中的行那些事
    三目运算
    10个不能重复的随机数要求为55-109的整数, 要将10个随机数打印出来,并且将10个随机数里面能够被5整除的数打印出来,最后将能够被5整除的数叠加的结果打印出来
    输出从小到大排序好的五个不重复的随机整数,范围[10-23)。努力的人全世界都为你让路!你的努力终将美好!
    随机取10个在55-80之间的数,按照从小到大排序输出,冒泡排序
    求10个随机数,随机数要求为25-99的整数.能够被3整除的数
  • 原文地址:https://www.cnblogs.com/gopark/p/12292164.html
Copyright © 2020-2023  润新知