在 TypeScript 中 React UseState 钩子类型
本文将演示在 TypeScript 中使用 React useState
钩子。
React useState
钩子定义
React useState
钩子在使用功能组件时起着重要的作用,从存储临时数据到从 API 调用接收数据。随着 TypeScript 的引入,开发人员的体验得到了多方面的提升。
TypeScript 支持向 React useState
钩子添加类型。这是有利的,因为 TypeScript 可以在设置值期间推断类型,甚至检测类型中的错误。
这可以更早地得到缓解,从而实现安全部署。
根据 TypeScript React 文档,TypeScript 对 React useState
有一个通用定义。
function useState<S>(initialState: S | (() => S)): [S, Dispatch<SetStateAction<S>>];
这里,S
是一个泛型类型。它接受初始状态,钩子可以接受由 S
指示的状态和 Dispatch<SetStateAction<S>>
类型的 setState
函数。
了解 setState
函数的推断类型的一种简单方法是将鼠标悬停在任何适当的 IDE 或文本编辑器(如 VSCode)中的变量上。
在 TypeScript 中使用带有 React useState
Hook 的原始类型
useState
钩子可以在应用程序状态中设置原始类型。原始类型包括 number
、string
和 boolean
。
这是一个示例,说明如何将 useState
用于 TypeScript 中的原始类型。
const InfoComponent = () => {
const [name, setName] = React.useState<string>("");
const [age, setAge] = React.useState<number>(0);
const [isMarried, setIsMarried] = React.useState<boolean>(false);
React.useEffect(() => {
setName("Geralt");
setAge(95);
setIsMarried(false);
}, []);
return (
<>
<div>Witcher name : {name}</div>
<div>Age : {age}</div>
<div>Married : {isMarried ? 'Yes' : 'No'}</div>
</>
)
}
因此,useState
钩子已用于存储原始类型,这些原始类型设置在 useEffect
钩子中,该钩子在组件安装时触发一次。
在 TypeScript 中使用用户定义的接口存储状态
甚至用户定义的接口也可以用作 useState
钩子的类型。可以修改上一节中使用的代码段以将信息存储在接口中,从而使代码变得更有条理。
interface IUser {
name : string ;
age : number ;
isMarried : boolean ;
}
const InfoComponent = () => {
const [ state, setState ] = React.useState<IUser>({
name : "",
age : 0,
isMarried : false
});
React.useEffect(() => {
setState({
name : "Geralt",
age : 95,
isMarried : false
});
}, []);
return (
<>
<div>Witcher name : {state.name}</div>
<div>Age : {state.age}</div>
<div>Married : {state.isMarried ? 'Yes' : 'No'}</div>
</>
)
}
为了在 setState
函数中设置可选字段,as
关键字可用于类型断言。我们必须使用传递给 setState
函数的可选状态属性来覆盖初始状态。
setState({
...state, ...{
name : "Geralt",
isMarried : "false"
} as unknown as IUser
});
因此在上面的例子中,age
字段没有被设置,并且使用了默认值,它是由 state
提供的。状态覆盖由 ...
或扩展运算符完成。
在 TypeScript 的 useState
Hook 中使用数组
在从 API 获取数据时,数组通常可以在 useState
挂钩中使用。以下代码段演示了这一点,同时使用 useState
钩子获取数据并显示它。
interface IPost {
userId : number ;
id : number ;
title : string ;
body : string ;
}
export default App = () => {
const [ state, setState ] = React.useState<IPost[]>([]);
const getPosts = async () => {
const res : Response = await fetch("https://jsonplaceholder.typicode.com/posts");
const posts : IPost[] = await res.json();
setState(posts);
}
React.useEffect(() => {
getPosts();
}, []);
return (
<>
{
state.map( (post,index) => <div key={index}>
<h2>{post.title}</h2>
<div>{post.id}</div>
<p>{post.body}</p>
</div>
)
}
</>
)
}
相关文章
在 TypeScript 中使用 try..catch..finally 处理异常
发布时间:2023/03/19 浏览次数:181 分类:TypeScript
-
本文详细介绍了如何在 TypeScript 中使用 try..catch..finally 进行异常处理,并附有示例。
在 TypeScript 中使用 declare 关键字
发布时间:2023/03/19 浏览次数:97 分类:TypeScript
-
本教程指南通过特定的实现和编码示例深入了解了 TypeScript 中 declare 关键字的用途。
在 TypeScript 中 get 和 set
发布时间:2023/03/19 浏览次数:172 分类:TypeScript
-
本篇文章演示了类的 get 和 set 属性以及如何在 TypeScript 中实现它。
在 TypeScript 中格式化日期和时间
发布时间:2023/03/19 浏览次数:161 分类:TypeScript
-
本教程介绍内置对象 Date() 并讨论在 Typescript 中获取、设置和格式化日期和时间的各种方法。
在 TypeScript 中返回一个 Promise
发布时间:2023/03/19 浏览次数:182 分类:TypeScript
-
本教程讨论如何在 TypeScript 中返回正确的 Promise。这将提供 TypeScript 中 Returns Promise 的完整编码示例,并完整演示每个步骤。
在 TypeScript 中定义函数回调的类型
发布时间:2023/03/19 浏览次数:221 分类:TypeScript
-
本教程说明了在 TypeScript 中为函数回调定义类型的解决方案。为了程序员的方便和方便,实施了不同的编码实践指南。
在 TypeScript 中把 JSON 对象转换为一个类
发布时间:2023/03/19 浏览次数:110 分类:TypeScript
-
本教程演示了如何将 JSON 对象转换为 TypeScript 中的类。
使用 NPM 将 TypeScript 更新到最新版本
发布时间:2023/03/19 浏览次数:130 分类:TypeScript
-
本教程说明了如何使用 npm 更新到最新版本的 TypeScript。这将为如何使用 npm 将 TypeScript 更新到最新版本提供完整的实际示例。
使用 jQuery 和 TypeScript
发布时间:2023/03/19 浏览次数:151 分类:TypeScript
-
本教程提供了使用 jQuery 和 TypeScript 的基本理解和概念。