首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用泛型在react中键入useState钩子

使用泛型在react中键入useState钩子
EN

Stack Overflow用户
提问于 2022-11-17 08:49:24
回答 1查看 24关注 0票数 0

具有自定义的react钩子,用于处理文本字段和复选框上的输入验证。使用泛型,因为value可以是字符串或布尔值。

试图通过value设置setValue会导致错误Argument of type 'Type' is not assignable to parameter of type 'SetStateAction<Type>'.

代码语言:javascript
运行
复制
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来绕过这个问题。

代码语言:javascript
运行
复制
const [value, setValue] = useState<any>();

我使用没有泛型的useState钩子进行了测试,它运行得很好:

代码语言:javascript
运行
复制
const [test, setTest] = useState<string>()
setTest("someText")
console.log(test)

我假设我需要以一种不同的方式键入我的useState钩子,也许用SetStateAction?现在,我不明白为什么我可以使用显式类型而不是泛型类型键入useState钩子。

EN

回答 1

Stack Overflow用户

发布于 2022-11-17 08:58:06

不向useState传递任何参数等同于传递undefined,因此应该在泛型参数中包括undefined

代码语言:javascript
运行
复制
const [value, setValue] = useState<Type | undefined>();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74472498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档