jsx(3)-event事件参数

要获取event对象的化
如果不使用this,直接绑定函数就可以了。


image.png

绑定不绑定this和传递event没有关系。event是默认参数传递过来的。

掌握1:如果要使用this,又要使用event

方式1,2,3都可以:

 {/* 1.event参数的传递 */}
 <button onClick={this.btnClick.bind(this)}>按钮1</button>(默认参数传递)
 <button onClick={this.btnClick2}>按钮2</button>(默认参数传递)
 <button onClick={(event) => this.btnClick(event)}>按钮3</button>

而且这里传入的event对象,不是原生的event对象,是react拿到原生的event对象以后,react又做了一层包装。但是之前原生的event里面的对象,在这里面都是有的,直接调用就行。

掌握2:如果要传递额外参数

        {/* 2.额外的参数传递 */}
              <button onClick={this.btnClick.bind(this, "kobe", 30)}>
                按钮3(不推荐)
              </button>

              <button onClick={(event) => this.btnClick(event, "why", 18)}>
                按钮4
              </button>

使用bind传递的化,

    btnClick(event, name, age) {
          console.log("btnClick:", event, this);
          console.log("name, age:", name, age);
        }

event被传递到第三个参数的位置了。


image.png

这一点要注意,用bind的化,要这么写

  <button onClick={this.btnClick.bind(this, "kobe", 30)}>
                按钮3(不推荐)
              </button>
    btnClick( name, age, event) {
          console.log("btnClick:", event, this);
          console.log("name, age:", name, age);
        }
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>计数器</title>
  </head>
  <body>
    <div id="root"></div>

    <script src="../lib/react.js"></script>
    <script src="../lib/react-dom.js"></script>
    <script src="../lib/babel.js"></script>

    <script type="text/babel">
      // function foo(name, age, height) {}
      // const bar = foo.bind("aaa", "kobe", 30)
      // bar("event")

      // 1.定义App根组件
      class App extends React.Component {
        constructor() {
          super();
          this.state = {
            message: "Hello World",
          };
        }

        btnClick(event, name, age) {
          console.log("btnClick:", event, this);
          console.log("name, age:", name, age);
        }

        btnClick2 = (event) => {
          console.log(this);
          console.log(event);
        };

        render() {
          const { message } = this.state;

          return (
            <div>
              {/* 1.event参数的传递 */}
              <button onClick={this.btnClick.bind(this)}>按钮1</button>
              <button onClick={this.btnClick2}>按钮2</button>
              <button onClick={(event) => this.btnClick(event)}>按钮3</button>

              {/* 2.额外的参数传递 */}
              <button onClick={this.btnClick.bind(this, "kobe", 30)}>
                按钮3(不推荐)
              </button>

              <button onClick={(event) => this.btnClick(event, "why", 18)}>
                按钮4
              </button>
            </div>
          );
        }
      }

      // 2.创建root并且渲染App组件
      const root = ReactDOM.createRoot(document.querySelector("#root"));
      root.render(<App />);
    </script>
  </body>
</html>
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容