具有自定义的react钩子,用于处理文本字段和复选框上的输入验证。使用泛型,因为value可以是字符串或布尔值。
试图通过value设置setValue会导致错误Argument of type 'Type' is not assignable to parameter of type 'SetStateAction<Type>'.
export function useInputValidation<Type>(_validationFunc = null): InputValidationState<Type> {
const [isValid, setIsValid] = useState(false);
const [message, setMessage] = useState("");
const [value, setValue] = useState<Type>();
/** handle input of control */
const handleInput = <Type,>(_value: Type): void => {
const result =
_validationFunction === null
? { isValid: true, message: "all good" }
: _validationFunction(_value);
setMessage(result.message);
setIsValid(result.isValid);
setValue(_value);
};
return //...
}我可以通过将setValue状态输入到any来绕过这个问题。
const [value, setValue] = useState<any>();我使用没有泛型的useState钩子进行了测试,它运行得很好:
const [test, setTest] = useState<string>()
setTest("someText")
console.log(test)我假设我需要以一种不同的方式键入我的useState钩子,也许用SetStateAction?现在,我不明白为什么我可以使用显式类型而不是泛型类型键入useState钩子。
发布于 2022-11-17 08:58:06
不向useState传递任何参数等同于传递undefined,因此应该在泛型参数中包括undefined:
const [value, setValue] = useState<Type | undefined>();https://stackoverflow.com/questions/74472498
复制相似问题