我刚开始学习打字稿。我试图从 Javascript 迁移一个项目,但我被一个自定义钩子卡住了。
钩子 useForm 只处理表单中输入的 onChange 事件,然后更新它们的值,以便我可以写入并控制它们的状态。
interface formProps{
initialValues: {[key: string]: string}
}
export const useForm = ( initialState: formProps['initialValues'] ) => {
const [values, setValues] = useState(initialState);
const reset = () => {
setValues(initialState);
}
const handleInputChange = ({ target }: React.ChangeEvent<HTMLInputElement>) =>{
setValues({
...values,
[target.name]:target.value
})
}
return [values, handleInputChange, reset]
}
useForm 的参数应该是一个具有不同条目的对象,但问题是它可能随时不同,所以我不能指定这个。
例如,当我尝试在组件中使用钩子时,values.userID
或者values['password`]
出现错误:
类型 '{ [key: string]: string; 上不存在属性 'password' } | (({ target }: ChangeEvent) => void)'
我该如何解决这个问题?提前致谢!
编辑:我从“值”中提取值:
const [values, handleInputChange] = useForm({userID: '', password: ''})
我让它工作使用:
import { useState } from "react";
interface InitialStateTypes {
[key: string]: string;
}
export const useForm = (initialState: InitialStateTypes): [InitialStateTypes, ({ target }: React.ChangeEvent<HTMLInputElement>) => void, ()=> void] => {
const [values, setValues] = useState(initialState);
const reset = () => {
setValues(initialState);
}
const handleInputChange = ({ target }: React.ChangeEvent<HTMLInputElement>) =>{
setValues({
...values,
[target.name]:target.value
})
}
return [values, handleInputChange, reset]
}
values['value']
而且我可以使用而不是访问“值”中的值values.value
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句