当前位置: 首页 > 面试题库 >

打字稿:React事件类型

葛书
2023-03-14
问题内容

React事件的正确类型是什么。最初,我只是any为了简单起见而使用。现在,我正在尝试清理并避免any完全使用。

所以像这样一个简单的形式:

export interface LoginProps {
  login: {
    [k: string]: string | Function
    uname: string
    passw: string
    logIn: Function
  }
}
@inject('login') @observer
export class Login extends Component<LoginProps, {}> {
  update = (e: React.SyntheticEvent<EventTarget>): void => {
    this.props.login[e.target.name] = e.target.value
  }
  submit = (e: any): void => {
    this.props.login.logIn()
    e.preventDefault()
  }
  render() {
    const { uname, passw } = this.props.login
    return (
      <div id='login' >
        <form>
          <input
            placeholder='Username'
            type="text"
            name='uname'
            value={uname}
            onChange={this.update}
          />
          <input
            placeholder='Password'
            type="password"
            name='passw'
            value={passw}
            onChange={this.update}
          />
          <button type="submit" onClick={this.submit} >
            Submit
          </button>
        </form>
      </div>
    )
  }
}

我在这里使用什么类型作为事件类型?

React.SyntheticEvent<EventTarget>似乎没有工作,因为我收到一个错误消息,name并且value不存在target

对于所有事件的更笼统的回答,我们将不胜感激。

谢谢


问题答案:

该SyntheticEvent接口是通用的:

interface SyntheticEvent<T> {
    ...
    currentTarget: EventTarget & T;
    ...
}

并且currentTarget是一般约束与的交集 EventTarget
另外,由于事件是由输入元素引起的,因此应使用FormEvent(在定义文件中,react
docs
)。

应该:

update = (e: React.FormEvent<HTMLInputElement>): void => {
    this.props.login[e.currentTarget.name] = e.currentTarget.value
}


 类似资料:
  • 问题内容: npm软件包允许我们在TypeScript应用程序内部使用React。我们将组件定义为 在这里,我们必须声明组件属性和状态的类型(在类型变量中)。 在声明了这些类型之后,TypeScript将使用该类型来验证组件的用法(传递给它的道具的形状)。 我想围绕这样的组件创建一个容器。容器将重复使用组件的道具。但是,为了创建具有相同道具的另一个组件,我必须再次重新声明道具的类型。或从原始组件文

  • 我正在努力寻找 有什么不同?

  • 问题内容: 我希望能够实例化一个Typescript类,在运行时可以获取该类和构造函数的详细信息。我想编写的函数将包含类名和构造函数参数。 问题答案: 您可以尝试: 编辑 此版本可在TypeScript操场上使用,例如:

  • 我在我的React应用程序中使用TypeScript。我想严格检查传递给我的组件的道具类型,如果不匹配,就会抛出错误。 服务属性应该包含数量作为数字(通过接口指定),但即使我从父组件传递字符串,它也可以工作,并且typescript不会抛出错误。 同样的函数prop myFunc,它需要数字参数和返回类型是无效的。但是Im传递不同类型的默认参数,返回类型是布尔值。 为什么typescript不会抛

  • 我正在用打字稿重写我的React应用程序。我正在尝试将所有组件实现为功能组件。 Typescript允许我们利用类型别名和接口来定义对象的形状或函数签名。我已经讲过了类型和接口的区别。 我读过的几乎所有文章都通过使用接口定义了一个组件,而这个接口本可以使用类型别名。据我所知,interface和type alias对于React组件给出了相同的结果,那么为什么几乎在每个定义中都使用了interfa

  • 问题内容: 几个月前,我使用create-react-app启动了一个react项目,我对将项目从Javascript迁移到Typescript很感兴趣。 我看到有一种使用typescript使用标志创建react应用的方法: 但是我没有找到任何解释如何将现有的JS项目迁移到TS。我需要逐步完成它,以便可以同时使用.js和.ts文件,以便可以随时间进行转换。有人对这次迁移有任何经验吗?要执行此工作