美文网首页
复用事件处理函数

复用事件处理函数

作者: a_pioneer | 来源:发表于2017-08-06 17:19 被阅读0次
  1. 在React中,有时一个组件中会有多个事件处理函数,代码格式上差别不大,这样往往会造成重复的编写类似的代码
handleChange1...
handleChange2...
handleChange3...
  • 多事件处理函数示例
    class ConstrolInput extends React.Component {
      constructor(props) {
        super(props);
        this.state = {
          name: 'hello world',
          selected: 'boy',
          checked: false
        };

        this.handleSubmit = this.handleSubmit.bind(this);
        this.handleInput = this.handleInput.bind(this);
        this.handleSelected = this.handleSelected.bind(this);
        this.handleCheck = this.handleCheck.bind(this);
      }
      handleSubmit(event) {
        event.preventDefault(); 
        console.log(this.state);
      }
      handleInput(e) {
        this.setState({name: e.target.value});
      }
      handleSelected(e) {
        this.setState({selected: e.target.value});
      }
      handleCheck(e) {
        this.setState({checked: e.target.checked});
      }
      render() {
        return (
          <form onSubmit={this.handleSubmit}>
            <p>
              <input defaultValue={this.state.name} onChange={this.handleInput} />
            </p>
            <p>
              <select value={this.state.selected} onChange={this.handleSelected}>
                <option value="boy">男</option>
                <option value="girl">女</option>
              </select>
            </p>
            <p>
              <label>
                <input type="checkbox" checked={this.state.checked} onChange={this.handleCheck} />
                请阅读条款
              </label>
              <button type="submit">Alert</button>
            </p>
          </form>
        );
      }
    }
  1. 解决的方法是将这类处理函数整合成一个函数onChange={this.handleChange}
  • bind 复用: 利用bind在绑定this的时候能预先传入参数的特性
    class ConstrolInput extends React.Component {
      constructor(props) {
        super(props);
        this.state = {
          name: 'hello world',
          selected: 'boy',
          checked: false
        };

        this.handleSubmit = this.handleSubmit.bind(this);
      }
      handleSubmit(event) {
        event.preventDefault(); 
        console.log(this.state);
      }
      handleChange(name, event) {
        let newState= {};
        newState[name] = name === "checked" ? event.target.checked
          : event.target.value;
        this.setState(newState);
      }
      render() {
        return (
          <form onSubmit={this.handleSubmit}>
            <p>
              <input defaultValue={this.state.name} onChange={this.handleChange.bind(this, 'name')} />
            </p>
            <p>
              <select value={this.state.selected} onChange={this.handleChange.bind(this, 'selected')}>
                <option value="boy">男</option>
                <option value="girl">女</option>
              </select>
            </p>
            <p>
              <label>
                <input type="checkbox" checked={this.state.checked} onChange={this.handleChange.bind(this, 'checked')} />
                请阅读条款
              </label>
              <button type="submit">Alert</button>
            </p>
          </form>
        );
      }
    }
  • name 复用:设置对应的 name 属性
    class ConstrolInput extends React.Component {
      constructor(props) {
        super(props);
        this.state = {
          name: 'hello world',
          selected: 'boy',
          checked: false
        };

        this.handleSubmit = this.handleSubmit.bind(this);
        this.handleChange = this.handleChange.bind(this);
      }
      handleSubmit(event) {
        event.preventDefault(); 
        console.log(this.state);
      }
      handleChange(event) {
        let newState= {};
        const name = event.target.name;
        newState[name] = name === 'checked' ? event.target.checked
          : event.target.value;
        this.setState(newState);
      }
      render() {
        return (
          <form onSubmit={this.handleSubmit}>
            <p>
              <input name="name" defaultValue={this.state.name} onChange={this.handleChange} />
            </p>
            <p>
              <select name="selected" value={this.state.selected} onChange={this.handleChange}>
                <option value="boy">男</option>
                <option value="girl">女</option>
              </select>
            </p>
            <p>
              <label>
                <input name="checked" type="checkbox" checked={this.state.checked} onChange={this.handleChange} />
                请阅读条款
              </label>
              <button type="submit">Alert</button>
            </p>
          </form>
        );
      }
    }

相关文章

  • 复用事件处理函数

    在React中,有时一个组件中会有多个事件处理函数,代码格式上差别不大,这样往往会造成重复的编写类似的代码 多事件...

  • redis 事件 客户端 服务器

    1. 事件 1.1 main函数流程图 1.2 文件事件 构成 套接字I/O多路复用程序文件事件分派器事件处理器 ...

  • react事件处理

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

  • JavaScript函数02

    目录 常用事件和事件处理函数 递归函数 函数的属性和方法 函数的作用域 常用事件和事件处理函数 事件参考--MDN...

  • jqurey事件

    jQuery 事件函数 jQuery 事件处理方法是 jQuery 中的核心函数。 事件处理程序指的是当 HTML...

  • vue:巧用事件委托提升性能

    大量的事件处理函数会影响性能: 事件处理函数本质上是一种函数,是一种对象,存放在内存中,设置大量的事件处理函数会使...

  • js的事件处理机制

    事件处理函数的机制: 在给某个函数添加了事件处理函数后,一旦事件发生,相应的javascript代码就会得到执行。...

  • React事件绑定this的几种方法

    React事件处理函数绑定this的集中方法 Follow me on GitHub React事件处理函数绑定t...

  • 好程序员分享React-010-事件处理函数的this指向问题

    好程序员分享React-010-事件处理函数的this指向问题,区分普通函数与事件处理函数 1、普通函数是直接调用...

  • JS的事件绑定、事件监听、事件委托

    事件绑定: 要想让JS对用户的操作做出响应,首先要对DOM元素绑定 事件处理函数。所谓事件处理函数,就是处理用户操...

网友评论

      本文标题:复用事件处理函数

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