在上一篇的文章中,学习了 TypeScript 的基本知识,以及 TS 在 React中的基本使用方法。在本文中,我们深入了解 TS在 React 中的实践。本文将采用 ant-design 作为基础的 UI 框架。
一、用 TS 创建 React 的 SFC(无状态组件)
在本次实践中,我们基于 antd 创建一个统一的 Input Form组件。该组件可以同时支持基本 Input、InputNumber和 Input.Text,我们将定义 elementTypeEnum
来判断该使用哪个输入组件。
1、引入 antd 的 Form, Input, InputNumber
组件(HXInputItem)
1 |
|
2、定义输入类型的枚举
1 |
|
3、创建 HXInputItem 的属性声明
1 |
|
4、创建 HXInputItem的 SFC
这一步非常重要,跟普通 React创建 SFC 有点区别。具体用法如下:
1 |
|
可以看到在 TS 创建 SFC 需要使用 React.SFC
属性,否则无法创建成功。
5、填充我们的 HXInputItem SFC
1 | //把当前传入的属性通过解构获取。 |
通过elementType
的值,调用不同的antd 中的输入组件,在项目中只引入当前SFC即可,让开发更加便利,快速和统一。若在以后的开发过程,存在特殊的需要,稍微兼容改造一下该组件即可,减少代码量。
6、声明该 SFC 的默认属性
1 |
|
7、导出该组件
1 | export default HXInputItem; |
二、用TS 加载远程数据(fetch Api)
1、定义 http Response 的 Interface
1 |
|
2、定义统一的获取 JSON 数据的 fetch 方法
1 |
|
3、使用 fetch 的 get方法,请求JSON 数据
1 |
|
3、使用 fetch 的 post,提交表单(FormData)
1 | /** |
4、使用 fetch 获取文件流
1 | /* * |
三、 使用 TS创建普通的 React 组件
先上完整的组件代码
1 |
|
有看出与普通 JS 创建React 组件的区别了吗?
(1)、使用泛型定义组件的 props 与 state;
(2)、创建默认的 state 值,必须在SearchBoxState
已经定义,否则出错。
(3)、 defaultProps
需要使用 static
修饰
四、创建 d.ts 文件
在项目根目录创建 typings 的文件夹,在 typings 中创建 index.d.ts
文件中输入以下内容
1 | interface Promise<T> { |
由于我们在使用 fetch 请求数据时,返回的数据使用 Promise<IRestRes>
返回。如果不创建上门的 d.ts
,编辑器在编译时可能无法Promise<IRestRes>
。为什么呢?
因为:
typings的存在是为了方便TypeScript识别、编译、智能提示TypeScript无法识别的JS库的特性和语法。
五、总结
TS在 React 的使用远不止这些,本文只是抛砖引玉,让我们对 TS 的了解更加深入,而且更是感叹 TS 的强大。