Ala*_*lan 0 javascript typescript reactjs
我正在尝试获取此函数参数的正确类型
const handleInputChange = ({ target }) => {
setFormValues({
...formValues,
[target.name]: target.value,
});
};Run Code Online (Sandbox Code Playgroud)
它向我抛出一个错误,但没有使应用程序崩溃,但我知道这不是一个好的做法。
为了提供更多上下文,所有正在更改的字段都是字符串。
它告诉你这一点是因为你还没有告诉它参数的类型是什么。
\n您需要告诉它类型是什么。有几种方法:
\n输入您要为其分配函数的常量;或者
\n直接输入参数
\n您可以使用ChangeEventHandler通用类型来做到这一点,将元素的类型作为类型参数:
import { ChangeEventHandler } from "react";\n\n// ...\n\nconst onChange: ChangeEventHandler<HTMLInputElement> = ({currentTarget}) => {\n// type \xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n console.log(`${currentTarget.name} => ${currentTarget.value}`);\n};\nRun Code Online (Sandbox Code Playgroud)\n该参数是一个具有currentTarget属性的事件对象,因此如果(例如)在 上使用该参数HTMLInputElement,则可以使用类型{ currentTarget: HTMLInputElement }:
const handleInputChange = ({ currentTarget }: { currentTarget: HTMLInputElement }) => {\n// type \xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n // ...\n};\nRun Code Online (Sandbox Code Playgroud)\n或者你可以使用ChangeEvent<T>:
import { ChangeEvent } from "react";\n\n// ...\n\nconst handleInputChange = ({ currentTarget }: ChangeEvent<HTMLInputElement>) => {\n// type \xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92\xe2\x88\x92^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n // ...\n};\nRun Code Online (Sandbox Code Playgroud)\n注意我使用currentTarget而不是target. input对于元素来说通常并不重要(target如果currentTarget处理程序位于input,而不是其父/祖先上,则总是相同的),但对于button元素和其他一些元素来说却很重要(因为target可能是后代元素)。如果您正在处理change父/祖先元素而不是直接处理,这一点很重要input。
| 归档时间: |
|
| 查看次数: |
848 次 |
| 最近记录: |