react json转换_Typescript + React 新手篇

极链科技前端工程师茅丹丹

前言

· TS是什么

Type = Type + (标准JS)。

TS的官方网站:Type is a typed superset of Java that compiles to plain Java。Type是一个编译到纯JS的有类型定义的JS超集。

· TS优点

· TS 最大的优势是它提供了强大的静态分析能力,结合 TSLint 能对代码做到更加严格的检查约束。传统的 Ecma 由于没有静态类型,即使有了 ESLint 也只能做到很基本的检查,一些 typo 问题可能线上出了 Bug 后才被发现。

· TS 让代码更加健壮,尤其是对于大型项目,编译通过几乎就代表运行正常,也给重构增加了很多信心。

· TS 类型声明让提高代码的可读性、结构清晰

· IDE的提示更加智能

目标

完成td的媒体模块(基于react+umi+ant design),重构以前的ES6代码为TS代码

· ✅umi-type 脚手架

· ✅跑通代码

· ✅新建媒体页面

· ✅创建媒体model

· ✅媒体service

· ✅charles

· ✅接入dev环境

· ✅接入鉴权

· ✅页面列表

· ✅路由配置提取出来

· ✅结合td umi/webpack/ dva 配置

· ✅全局错误信息从接口读取

· �更换主题

· �深入代码(最重要的部分)

花了大概两天时间实现以上勾选内容,主要是熟悉ts的配置文件、构建配置、ts语法、以及react、dva如何写。

安装依赖

7e5c5afaf258e5fd5693968a06530e87.png

基本配置

tsconfig.json

这个文件指定了用来编译这个项目的根文件和编译选项

JSX参数指定工作模式:preserve 模式和 react 模式以及 react-native 模式。这三个模式只影响编译策略。preserve 模式会生成代码中会保留 JSX ,以供后续的转换操作使用(比如:Babel),输出的文件是 .jsx 格式的;而 react模式则会直接编译成 React.,在使用前就不需要再进行 JSX 转换了,输出的文件是 .js 格式的;react-native模式相当于preserve,它也保留了所有的JSX,但是输出文件的扩展名是.js。

c02db705535966279633fad473bd694d.png

jsconfig.json

指定根文件和Java语言服务提供的功能选项。

提示:如果您不使用Java,则无需担心jsconfig.json。

提示:jsconfig.json源于tsconfig.json,是Type的配置文件。jsconfig.json相当于tsconfig.json的“allowJs”属性设置为true。

webpack配置

2c5fe760e8e0842721ed820c28087e50.png

文件后缀改成ts或者tsx

文件名为ts和tsx(React)后缀的代码了,它可以和现有的ES6代码共存,IDE会自动校验这部分代码,webpack打包也没问题了。

业务代码

目录截图

0372d0f592d74fd091dd4dc4e1b6a366.png

data.d.ts

定义业务对象数据结构接口(interface),字段类型可以是number,string,boolean,也可以是业务对象(下方的Member),也可以是多个值中的一个(下方的status,可以设置成枚举),不确定类型的时候用any,数组的话用用‘类型[]’,字段不一定存在用‘?’

1c1d08e70f50db11ab0941cb6463c8fb.png

model.ts

处理数据和逻辑,包含同步更新 state 的 reducers,处理异步逻辑的 effects,订阅数据源的 subions 。

Partial 作用是将传入的属性变为可选项.

Readonly 作用是将传入的属性变为变成只读

025813966b3f97dc1a61657eda6b5362.png

service.ts

定义接口请求的路径、方法和参数,返回为Promise

0be094f36817cf904ecd43be649e617c.png

类组件

86f50578a5941e259d92c7e7e6db7dfa.png

connect

connect dva 和 react component

bda049134ecfb926a7fc5165d5d920de.png

函数组件

23f52f1cd251285a0f0a1ff1364279a2.png

在@types/react中已经预定义一个类型type SFC,它也是类型interface StatelessComponent

的一个别名,此外,它已经有预定义的children和其他(defaultProps、displayName等等…),所以我们不用每次都自己编写!

4e46a19e138c88e285105c3dfb4d7094.png

form组件

06ab9c50ba3902a36907698afc20cce1.png

高阶函数

c4979b711132f5865df7ac21dd8e317b.png

最后

ts 使得代码变得非常清晰、可读、规范,虽然改起来有些工作量。希望后续的项目中可以应用起来。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/539196.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android listview 滑动条显示_第七十六回:Android中UI控件之RecyclerView基础

各位看官们,大家好,上一回中咱们说的是Android中UI控件之ListView优化的例子,这一回咱们说的例子是UI控件之RecyclerView。闲话休提,言归正转。让我们一起Talk Android吧!看官们,我们在前面章回中介绍了Lis…

Hive的数据模型-外部表

概述 包含External 的表叫外部表 删除外部表只删除metastore的元数据,不删除hdfs中的表数据 外部表 只有一个过程,加载数据和创建表同时完成,并不会移动到数据仓库目录中,只是与外部数据建立一个链接。当删除一个 外部表 时&…

centos默认安装mysql_centos6.x默认安装mysql5.7

1. yum 安装 mysql5.7 yum 源yum localinstall mysql57-community-release-el6-8.noarch.rpm2. 查看是否成功安装MySQL Yum Repositoryyum repolist enabled|grep ""mysql.*-community.*3. 安装mysqlyum install mysql-community-server4.开启数据库服务service mys…

Hive的数据模型-分区表

需求 select * from t1 where xxxx; 这是全表扫描的。实际应用中,有时候不一定需要全表扫描。 比如电信的日志文件,一个表里存了从去年到现在的日志文件,那是很多很大的,实际需求要查今天的,如果用上面的sql&#xf…

arduino 停止程序_建立Arduino机器人,第五部分:障碍规避

欢迎阅读教程系列的第五篇文章,其中我正在构建一个基于遥控Arduino的车辆机器人。这是我到目前为止发表的文章列表:第一部分:硬件组件第二部分:Arduino编程第三部分:组装机器人第四部分:A(不是那样)基本机器…

Yarn简单介绍及内存配置

在这篇博客中,主要介绍了Yarn对MRv1的改进,以及Yarn简单的内存配置和Yarn的资源抽象container。我么知道MRv1存在的主要问题是:在运行时,JobTracker既负责资源管理又负责任务调度,这导致了它的扩展性、资源利用率低等问…

mysql计算时间函数_mysql时间计算函数

当前一个业务需求,需要查找创建在三天以前的数据,表中是存了一个创建时间的;这个需求看起来很简单,直接全部查找出来然后用代码根据时间筛选一下就可以了。但这只是适用于数据量不大的情况下,如果数据量大,…

html上传文件_.NET基于WebUploader大文件分片上传、断网续传、秒传

(给DotNet加星标,提升.Net技能)转自:学习中的苦与乐cnblogs.com/xiongze520/p/10412693.html现在的项目开发基本上都用到了上传文件功能,或图片,或文档,或视频。我们常用的常规上传已经能够满足当前要求了,…

Hadoop运行任务时一直卡在: INFO mapreduce.Job: Running job

原文链接:http://blog.csdn.net/dai451954706/article/details/50464036 ----------------------------------------------------------------------------------------------------- 今天,一大清早同事就让我帮他解决Hive的问题:他在Hive中…

git切换用户密码_Git 最基本的命令

本人比较懒,不是很爱学习新东西,之前用Git一直在用GUI SourceTree,今天因为用到Cloud IDEGitHub才迫不得已用一下Git的命令行,如果你是Git的新手,也分享给你最基本的命令。新建一个Git版本库把一个本地文件夹变成一个G…

动态分区装载数据

不开启 一个个分区导入,分区需要做到一对一。 hive (zmgdb)> insert overwrite table p_t3 partition (cityningbo) > select name,post,address from p_t1 where cityningbo; 会启动mapreduce进行导入,mr卡在kill job_xxxx&#…

AI造福设计师:搭配色板这种苦差事交给GAN就好啦(教程)

本文来自AI新媒体量子位(QbitAI)设计师要开工,总是离不开配色方案,也就是色板。 不过,做色板可不是个简单的活,色板生成器Colormind的作者Jack Qiao(名字来自Product Hunt,我们下面叫…

mapreduce yarn内存参数

1、yarn-site.xml 设置 1.1 RM设置 RM的内存资源配置,主要是通过下面的两个参数进行的(这两个值是Yarn平台特性,应在yarn-sit.xml中配置好): yarn.scheduler.minimum-allocation-mb yarn.scheduler.maximum-allocati…

html网页设计大赛_HTML5网页设计大赛 || 决赛名单公布

历经数日的HTML5网页设计大赛初赛已经落下的帷幕激动人心的决赛即将开始你们准备好了吗?①决赛名单在经过评委老师多轮评选后,有以下队伍/(个人)脱颖而出进入决赛:1.施佳镛_故宫旅游网2.王永校_神秘莫测的宇宙3.黄炜岳_广州旅游网站4.吴贵滨_NameLess5.陈…

Hive的数据模型—桶表

概述 桶表是对数据进行哈希取值,然后放到不同文件中存储。 数据加载到桶表时,会对字段取hash值,然后与桶的数量取模。把数据放到对应的文件中。 物理上,每个桶就是表(或分区)目录里的一个文件,一个作业产…

delphi bmp绘制矢量文件效率慢_聊一聊矢量瓦片的常识

一、矢量瓦片的基本原理和相关格式现阶段,电子地图瓦片主要使用两种方式,一种是传统的栅格瓦片,另外一种是新出的矢量瓦片(Vector Tiles),前者是采用四叉树金字塔模型的分级方式,将地图切割成无数大小相等的矩形栅格图…

python生成器与迭代器。

生成器 在python 中一边循环一边计算的机制,叫做生成器(generator)。 通过列表生成式,我们可以直接创建一个列表。但是,收到内存的限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用…

python怎样将list转化成字典_在python 中如何将 list 转化成 dictionary

原标题:在python 中如何将 list 转化成 dictionary 问题1:如何将一个list转化成一个dictionary? 问题描述:比如在python中我有一个如下的list,其中奇数位置对应字典的key,偶数位置为相应的value解决方案: 1…

vscode gcc debug dbg gdb c cpp c++ cuckoo monitor

为什么80%的码农都做不了架构师?>>> 装cygwin 或者mingGW,装gcc工具链,并将cygwin的bin目录加入环境变量PATH中。 ctrlshiftb {// See https://go.microsoft.com/fwlink/?LinkId733558// for the documentation about the tasks…

python爬取知网论文关键词_Python爬虫根据关键词爬取知网论文摘要并保存到数据库中...

由于实验室需要一些语料做研究,语料要求是知网上的论文摘要,但是目前最新版的知网爬起来有些麻烦,所以我利用的是知网的另外一个搜索接口 搜索出来的结果和知网上的结果几乎一样 在这个基础上,我简单看了些网页的结构,…