event 用 ts 类型声明

一、DOM 事件类型声明示例

1. 鼠标点击事件(`MouseEvent`)

使用 React.MouseEvent<HTMLButtonElement> 定义

javascript 复制代码
import React from "react";



const MyComponent: React.FC = () => {

  const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {

    // 这里可以访问MouseEvent的相关属性,比如获取鼠标点击的坐标

    console.log("Client X:", event.clientX);

    console.log("Client Y:", event.clientY);

  };



  return <button onClick={handleClick}>Click Me</button>;

};



export default MyComponent;

2. 键盘输入事件(`KeyboardEvent`)

使用 React.KeyboardEvent<HTMLInputElement> 定义

javascript 复制代码
import React from "react";



const MyComponent: React.FC = () => {

  const handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {

    if (event.key === "Enter") {

      console.log("用户按下了回车键");

    }

  };



  return <input onKeyDown={handleKeyDown} placeholder="请输入内容" />;

};



export default MyComponent;

3. 表单提交事件(`FormEvent`)

使用 React.FormEvent<HTMLFormElement> 定义

javascript 复制代码
import React from "react";



interface FormData {

  username: string;

  password: string;

}



const MyComponent: React.FC = () => {

  const handleSubmit = (event: React.FormEvent<HTMLFormElement>) => {

    event.preventDefault();

    const formData: FormData = {

      username: (

        event.currentTarget.elements.namedItem("username") as HTMLInputElement

      ).value,

      password: (

        event.currentTarget.elements.namedItem("password") as HTMLInputElement

      ).value,

    };

    console.log("提交的表单数据:", formData);

  };



  return (

    <form onSubmit={handleSubmit}>

      <input type="text" name="username" placeholder="用户名" />

      <input type="password" name="password" placeholder="密码" />

      <button type="submit">提交</button>

    </form>

  );

};



export default MyComponent;
相关推荐
@小红花33 分钟前
从0到1学习Vue框架Day03
前端·javascript·vue.js·学习·ecmascript
前端与小赵36 分钟前
vue3中 ref() 和 reactive() 的区别
前端·javascript·vue.js
魔云连洲1 小时前
Vue的响应式底层原理:Proxy vs defineProperty
前端·javascript·vue.js
专注VB编程开发20年1 小时前
CSS定义网格的列模板grid-template-columns什么意思,为什么要用这么复杂的单词
前端·css
IT_陈寒1 小时前
Redis性能提升50%的7个关键优化策略,90%开发者都不知道第5点!
前端·人工智能·后端
Hilaku1 小时前
深入URL和URLSearchParams:别再用正则表达式去折磨URL了
前端·javascript·代码规范
pubuzhixing1 小时前
Canvas 的性能卓越,用它解决一个棘手问题
前端
weixin_456904271 小时前
Vue.jsmain.js/request.js/user.js/store/index.js Vuex状态管理项目核心模块深度解析
前端·javascript·vue.js
伍哥的传说1 小时前
Vue 3.6 Alien Signals:让响应式性能飞跃式提升
前端·javascript·vue.js·vue性能优化·alien-signals·细粒度更新·vue 3.6新特性
永日456701 小时前
学习日记-HTML-day51-9.9
前端·学习·html