📜  typescript react onchange 事件类型 - TypeScript (1)

📅  最后修改于: 2023-12-03 15:20:43.049000             🧑  作者: Mango

TypeScript与React中的OnChange事件类型

OnChange事件类型在React中用于创建受控组件,以便在用户输入内容时更新组件的状态。在TypeScript和React中使用OnChange事件时,需要注意一些类型问题。这篇文章将介绍OnChange事件类型的所有相关类型和用法。

onChange事件

OnChange事件可以在表单元素(如input和textarea)中使用,其作用是在用户输入时触发一个回调函数。以下是一个示例:

import React, { useState } from 'react';

const MyForm = () => {
  const [inputValue, setInputValue] = useState('');

  const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {
    setInputValue(event.target.value);
  }

  return (
    <form>
      <label>
        Name:
        <input type="text" value={inputValue} onChange={handleChange} />
      </label>
      <p>Hello {inputValue}!</p>
    </form>
  );
}

在上面的例子中,MyForm组件渲染一个input表单元素和一个包含输入值的段落。handleChange函数将输入值设置为组件的状态,并通过value prop将其传递给input元素。OnChange事件将在用户输入时触发handleChange函数。

React.ChangeEvent

React.ChangeEvent类型表示DOM元素的onChange事件。该事件具有以下属性:

  • target: 事件的目标元素
  • currentTarget: 事件的当前元素,也就是绑定事件处理程序的元素
  • bubbles: 事件是否冒泡

ChangeEvent类型的定义如下:

interface ChangeEvent<T = Element> extends SyntheticEvent<T, Event> {
  target: EventTarget & T;
}

可以看到,ChangeEvent继承自SyntheticEvent,在TypeScript中使用SyntheticEvent可以获取更多类型信息。SyntheticEvent类型与普通的DOM事件不同,因为它是跨浏览器的,并且被React用于有效地管理事件。所以通常应该优先使用SyntheticEvent,而不是直接使用DOM事件对象。

其他OnChange事件属性

除了React.ChangeEvent之外,还有很多其他属性可以在OnChange事件中使用。以下是一些常用的属性:

event.target.value

event.target.value属性表示输入元素的当前值。例如,在输入框中输入“Hello”,event.target.value将是“Hello”。

const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {
  console.log(event.target.value);
}
event.target.checked

event.target.checked属性代表复选框或单选框的选中状态。例如:

const [isChecked, setIsChecked] = useState(false);

const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {
  setIsChecked(event.target.checked);
}

return (
  <label>
    <input type="checkbox" checked={isChecked} onChange={handleChange} />
    Check me!
  </label>
);
event.target.files

event.target.files属性仅适用于文件上传元素。它代表用户选择的文件列表。例如:

const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {
  const file = event.target.files[0];
  console.log(file.name);
}

return (
  <label>
    Upload file:
    <input type="file" onChange={handleChange} />
  </label>
);
event.preventDefault()

event.preventDefault()可以阻止默认行为,例如在表单提交之前验证表单输入。例如:

const handleSubmit = (event: React.FormEvent<HTMLFormElement>) => {
  event.preventDefault();
  // 校验表单输入
}

return (
  <form onSubmit={handleSubmit}>
    {/* 表单内容 */}
  </form>
);
结论

OnChange事件类型在React和TypeScript中的使用与原生JavaScript并没有本质的区别。但是,在React中使用SyntheticEvent可以获得更多类型信息,并且可以避免一些跨浏览器的兼容性问题。掌握React和TypeScript中的OnChange事件类型,可以更轻松地创建高质量的React组件。