1. 首页
  2. IT资讯

「React TS3 专题」手把手教你创建一个 React TypeScript3项目

“u003Cdivu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002Fabc78cea29ba4ca69457a28540956e6b” img_width=”1440″ img_height=”800″ alt=”「React TS3 专题」手把手教你创建一个 React TypeScript3项目” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E关于React、TypeScript的介绍和其在前端的重要地位,想必大家都很清楚吧,在这里我就不过多的介绍。你也许会问为什么要基于 TypeScript3 构建 React ?不同的人也许有不同的答案,由于 TypeScript3 和 React 分别来自微软和Facebook,其江湖地位的显赫不言而喻,React的强大灵活些再结合TypeScript带来了可选的静态类型检查以及最新的ECMAScript特性,让我们能以类似Java这样工程化的思维构建我们的项目,让我们的代码更易阅读和易于维护。u003Cu002Fpu003Eu003Cpu003E本系列文章,基于笔者对这本书《React with TypeScript 3》的读书笔记,不是翻译此书,笔者也是初学者,在这里与大家一起分享共同学习,本书的例子笔者都会亲自实践,替大家提前采坑,由于笔者英语水平有限,理解难免有偏差,如你发现问题欢迎大家留言指正,咱们一起共同进步。u003Cu002Fpu003Eu003Cpu003E为了表示对作者劳动的尊重,我就不在这里分享电子书了,感兴趣的可以可以到packtpub官网购买(packtpub.com)。u003Cu002Fpu003Eu003Ch1u003E关于作者:Carl Ripponu003Cu002Fh1u003Eu003Cpu003E在学习之前,我们先了解下本书的作者:Carl Rippon。Carl Rippon从事软件行业已超过20年,在各个领域开发了一系列复杂的业务应用程序。过去八年来,他一直使用各种JavaScript技术构建单页应用程序,包括Angular,ReactJS和TypeScript。 Carl撰写了100多篇关于各种技术的博客文章。u003Cu002Fpu003Eu003Ch1u003E本系列专题目录结构u003Cu002Fh1u003Eu003Cpu003E由于本书在一开始花了不少的篇幅介绍 TypeScript ,为了让大家快速接触基于 TypeScript3 的 React 项目笔者就不在这系列里进行介绍了,如果你认为有必要介绍,欢迎大家在留言区留言,如果留言人数多的话,我会专门开设个 TypeScript 3 专题进行专门介绍。u003Cu002Fpu003Eu003Cpu003E本系列目录结构暂定如下,在笔者读的过程中,为了让大家更全面的理解本系列专题,可能会进行补充和调整,并不是完全基于书的结构。u003Cu002Fpu003Eu003Culu003Eu003Cliu003E入门基础知识(创建、组件、生命周期等基础知识)u003Cu002Fliu003Eu003Cliu003EReact路由u003Cu002Fliu003Eu003Cliu003E高级类型u003Cu002Fliu003Eu003Cliu003E组件设计模式专题u003Cu002Fliu003Eu003Cliu003E如何使用表单u003Cu002Fliu003Eu003Cliu003ERedux专题u003Cu002Fliu003Eu003Cliu003Ehook专题u003Cu002Fliu003Eu003Cliu003E数据请求专题u003Cu002Fliu003Eu003Cliu003E使用GraphQLu003Cu002Fliu003Eu003Cliu003E用Jest进行单元测试u003Cu002Fliu003Eu003Cu002Fulu003Eu003Cpu003Eu003Cstrongu003E技术与系统环境要求u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E为了有更好的阅读体验,你至少具备基础的JS、CSS基础知识,掌握了一些 ES6+语法和 TypeScript 的基础知识。u003Cu002Fpu003Eu003Cpu003E运行本系列示例你至少安装了node环境,npm版本至少为 5.2,有一款你熟悉的编辑器,推荐你使用 Visual Studio。( 需要TSLint扩展和Prettier扩展。)u003Cu002Fpu003Eu003Cpu003E本系列笔者运行环境: u003Cstrongu003Enpm 6.9.0 node v10.16.3u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Ch1u003E开始创建我们的第一个基于 TypeScript3 的 React 项目u003Cu002Fh1u003Eu003Cpu003E笔者将介绍两种方式进行构建 React TS3( TypeScript3 简称,后面的内容都会以简称出现),分别为使用 create-react-app 进行快速构建 和 手工方式构建。u003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E一、使用 create-react-app 构建u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E1、全局安装 create-react-app 和 typescriptu003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E使用以下命令进行全局安装:u003Cu002Fpu003Eu003Cpreu003Enpm install -g create-react-appu003Cbru003Enpm install -g typescriptu003Cbru003Eu003Cu002Fpreu003Eu003Cpu003Eu003Cstrongu003E2、运行项目创建命令u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpreu003Enpx create-react-app my-react-ts-app –typescriptu003Cbru003Eu003Cu002Fpreu003Eu003Cpu003E注:请查看根目录下的的 package.json 文件确保React版本不低于16.7.0-alpha.0,笔者的react版本为16.9.0,如果低于16.7.0-alpha.0,你可以使用以下命令进行安装u003Cu002Fpu003Eu003Cpreu003Enpm install react@16.7.0-alpha.0u003Cbru003Enpm install react-dom@16.7.0-alpha.0u003Cbru003Eu003Cu002Fpreu003Eu003Cpu003Eu003Cstrongu003E3、添加 tslint.json 文件u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E3.1 为了让我们的代码更符合规范,我们安装tslint及相关依赖检查约束我们的代码规范:u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpreu003Ecd my-react-ts-appu003Cbru003Enpm install tslint tslint-react tslint-config-prettier –save-devu003Cbru003Eu003Cu002Fpreu003Eu003Cpu003Eu003Cstrongu003E3.2 为了方便开发,我们在Visual Studio Code 编辑器里安装扩展u003Cu002Fstrongu003E( Ctrl + Shift + X ),在左上角的搜索框中输入u003Cstrongu003Etslintu003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002F17626eaa9db2490eb8c83e0c399a7634″ img_width=”2942″ img_height=”820″ alt=”「React TS3 专题」手把手教你创建一个 React TypeScript3项目” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003Eu003Cstrongu003E3.3 在根目录创建 tslint.json 文件u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpreu003Etouch tslint.jsonu003Cbru003Eu003Cu002Fpreu003Eu003Cpu003Eu003Cstrongu003E3.4 打开 tslint.json 文件,添加相关规则u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpreu003E{u003Cbru003E “extends”: [u003Cbru003E “tslint:recommended”,u003Cbru003E “tslint-react”,u003Cbru003E “tslint-config – prettier “u003Cbru003E ],u003Cbru003E “rules”: {u003Cbru003E “ordered-imports”: false,u003Cbru003E “object-literal-sort-keys”: false,u003Cbru003E “no-debugger”: false,u003Cbru003E “no-console”: false,u003Cbru003E },u003Cbru003E “linterOptions”: {u003Cbru003E “exclude”: [u003Cbru003E “configu002F**u002F*.js”,u003Cbru003E “node_modulesu002F**u002F*.ts”,u003Cbru003E “coverageu002Flcov-reportu002F*.js”u003Cbru003E ]u003Cbru003E }u003Cbru003E}u003Cbru003Eu003Cu002Fpreu003Eu003Cpu003E上述配置规则允许我们使用debugger和console,并且允许imports和对象key的声明可以不按照字母的顺序。规则的设置介绍就不在这里详细介绍了,感兴趣的可以到官网进行详细阅读(https:u002Fu002Fpalantir.github.iou002Ftslintu002Frulesu002F )。u003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E4、打开App.tsx做一些小改动u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpreu003E <a className=”App-link” u003Cbru003E href=”https:u002Fu002Freactjs.org”u003Cbru003E target=”_blank”u003Cbru003E rel=”noopener noreferrer”u003Cbru003E >u003Cbru003E Learn React and TypeScriptu003Cbru003E <u002Fa>u003Cbru003Eu003Cu002Fpreu003Eu003Cpu003E修改完后,我们进行保存。u003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E5、运行项目u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E如果你能按照上述顺序执行,输入以下命令,不出意外你就能成功运行我们的的项目了u003Cu002Fpu003Eu003Cpreu003Enpm startu003Cbru003Eu003Cu002Fpreu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp3.pstatp.comu002Flargeu002Fpgc-imageu002Fa066a64dbbaa410bab3773de86a82504″ img_width=”1524″ img_height=”1266″ alt=”「React TS3 专题」手把手教你创建一个 React TypeScript3项目” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003Eu003Cstrongu003E二、手动创建u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E手动创建步骤比较繁杂,但是能够从0~1的那种体验,还是蛮有成就感的。u003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E1、创建文件夹u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E首先我们手动创建一个文件夹manually,然后在manually下创建src源文件文件夹和发布环境用的dist文件夹u003Cu002Fpu003Eu003Cpreu003Emkdir manuallyu003Cbru003Ecd manuallyu003Cbru003Emkdir srcu003Cbru003Emkdir distu003Cbru003Eu003Cu002Fpreu003Eu003Cpu003Eu003Cstrongu003E2、创建 package.json 文件u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E该package.json文件定义了我们的项目名称,描述,构建命令,依赖npm模块等等。u003Cu002Fpu003Eu003Cpu003E打开终端输入以下命令:u003Cu002Fpu003Eu003Cpreu003Enpm initu003Cbru003Eu003Cu002Fpreu003Eu003Cpu003E然后按照提示输入项目的各种信息,然后就会在项目根目录创建一个 u003Cstrongu003Epackage.jsonu003Cu002Fstrongu003E 文件u003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E3、在本地项目安装TypeScriptu003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E我们可以通过以下命令,在本地项目进行安装u003Cu002Fpu003Eu003Cpreu003Enpm install typescript –save-devu003Cbru003Eu003Cu002Fpreu003Eu003Cpu003Eu003Cstrongu003E4、创建 tsconfig.json 文件u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003Etsconfig.json 配置了 TS3 如何编译以及相关的基本规则,配置如下:u003Cu002Fpu003Eu003Cpreu003E{ u003Cbru003E “compilerOptions”: { u003Cbru003E “target”: “es5”, u003Cbru003E “module”: “es6”, u003Cbru003E “moduleResolution”: “node”, u003Cbru003E “lib”: [“es6”, “dom”],u003Cbru003E “sourceMap”: true, u003Cbru003E “jsx”: “react”, u003Cbru003E “strict”: true, u003Cbru003E “noImplicitReturns”: true,u003Cbru003E “rootDir”: “src”,u003Cbru003E “outDir”: “dist”,u003Cbru003E },u003Cbru003E “include”: [“**u002F*.ts”, “**u002F*.tsx”],u003Cbru003E “exclude”: [“node_modules”]u003Cbru003E}u003Cbru003Eu003Cu002Fpreu003Eu003Cpu003Eu003Cstrongu003E5、添加TSLintu003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E在本地项目下安装TSLint,命令如下:u003Cu002Fpu003Eu003Cpreu003Enpm install tslint tslint-react tslint-config-prettier –save-devu003Cbru003Eu003Cu002Fpreu003Eu003Cpu003E通过以下命令创建tslint.json文件,并在文件里输入以配置内容:u003Cu002Fpu003Eu003Cpreu003Etouch tslint.jsonu003Cbru003E{u003Cbru003E “extends”: [“tslint:recommended”, “tslint-react”, “tslint-config-prettier”],u003Cbru003E “linterOptions”: {u003Cbru003E “exclude”: [“node_modulesu002F**u002F*.ts”]u003Cbru003E }u003Cbru003E}u003Cbru003Eu003Cu002Fpreu003Eu003Cpu003Eu003Cstrongu003E6、添加React相关依赖到项目中u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E通过以下命令将React安装到我们的项目里u003Cu002Fpu003Eu003Cpreu003Enpm install react react-domu003Cbru003Eu003Cu002Fpreu003Eu003Cpu003E添加React的TypeScript类型依赖,命令如下所示:u003Cu002Fpu003Eu003Cpreu003Enpm install @typesu002Freact @typesu002Freact-dom –save-devu003Cbru003Eu003Cu002Fpreu003Eu003Cpu003Eu003Cstrongu003E7、在dist目录下创建index.html文件u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpreu003E<!DOCTYPE html>u003Cbru003E<html>u003Cbru003E<head>u003Cbru003E <meta charset=”utf-8″u002F>u003Cbru003E<u002Fhead>u003Cbru003E<body>u003Cbru003E <div id=”root”><u002Fdiv>u003Cbru003E <script src=”bundle.js”><u002Fscript>u003Cbru003E<u002Fbody>u003Cbru003E<u002Fhtml>u003Cbru003Eu003Cu002Fpreu003Eu003Cpu003E我们React应用程序中的内容将会注入到id=root的div中,所有的JS内容都会编译成一个bundle.js,存在dist文件夹中。u003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E8、创建一个简单的React组件u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E我们在src目录里创建一个index.tsx文件,声明了一个函数组件,代码如下u003Cu002Fpu003Eu003Cpreu003Eimport * as React from “react”;u003Cbru003Eimport * as ReactDOM from “react-dom”;u003Cbru003Econst App: React.FC = () => {u003Cbru003E return <h1>My React App!<u002Fh1>;u003Cbru003E};u003Cbru003EReactDOM.render(<App u002F>, document.getElementById(“root”));u003Cbru003Eu003Cu002Fpreu003Eu003Cpu003Eu003Cstrongu003E注: u003Cu002Fstrongu003EReact.FC为React TypeScript的一个函数组件类型。这部分内容和原版内容不一致,原书内容为React.SFC,函数组件被称为“Stateless Function Components”,换句话说就是纯函数,由于作者编写本书时hook还没成为正式标准,hook的出现允许包含state和React lifecycle。所有使用React.FC来替换React.SFCu003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E9 、添加 webpacku003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E接下来我们使用webpack打包我们的项目,webpack是什么我就不过多介绍了,不明白的去 https:u002Fu002Fwebpack.js.orgu002F 官网看介绍。u003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E9.1 在本地项目中安装webpack依赖u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpreu003Enpm install webpack webpack-cli –save-devu003Cbru003Eu003Cu002Fpreu003Eu003Cpu003Eu003Cstrongu003E9.2 Webpack还有一个方便的Web服务,我们可以在开发过程中使用它:u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpreu003Enpm install webpack webpack-dev-server –save-devu003Cbru003Eu003Cu002Fpreu003Eu003Cpu003Eu003Cstrongu003E9.3 安装 ts-loaderu003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003Ets-loader帮助我们加载TypeScript相关代码,命令如下:u003Cu002Fpu003Eu003Cpreu003Enpm install ts-loader –save-devu003Cbru003Eu003Cu002Fpreu003Eu003Cpu003Eu003Cstrongu003E9.4 最后配置 webpack u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E接下来,我们在项目根目录创建 webpack.config.js 文件,配置文件内容如下:u003Cu002Fpu003Eu003Cpreu003Econst path = require(“path”);u003Cbru003Emodule.exports = {u003Cbru003E entry: “.u002Fsrcu002Findex.tsx”,u003Cbru003E mode: “development”,u003Cbru003E module: {u003Cbru003E rules: [{u003Cbru003E test: u002F\.tsx?$u002F,u003Cbru003E use: “ts-loader”,u003Cbru003E exclude: u002Fnode_modulesu002Fu003Cbru003E }]u003Cbru003E },u003Cbru003E resolve: {u003Cbru003E extensions: [“.tsx”, “.ts”, “.js”]u003Cbru003E },u003Cbru003E output: {u003Cbru003E path: path.resolve(__dirname, “dist”),u003Cbru003E filename: “bundle.js”u003Cbru003E },u003Cbru003E devServer: {u003Cbru003E contentBase: path.join(__dirname, “dist”),u003Cbru003E compress: true,u003Cbru003E port: 9000u003Cbru003E }u003Cbru003E};u003Cbru003Eu003Cu002Fpreu003Eu003Cpu003E针对这个配置文件,让我们来逐步分解下:u003Cu002Fpu003Eu003Culu003Eu003Cliu003Emodule.exports:声明webpack配置对象u003Cu002Fliu003Eu003Cliu003Emode:设置webpack当前为开发环境模式还是生产模式u003Cu002Fliu003Eu003Cliu003Eentry:设置webpack从哪里开始寻找要捆绑的模块,在我们的项目中入口文件是index.tsxu003Cu002Fliu003Eu003Cliu003Emodule:设置webpack如何处理不同的模块,WebPack使用 ts-loader 处理 ts文件和tsx扩展。u003Cu002Fliu003Eu003Cliu003Eresolve:设置webpack如何解析模块u003Cu002Fliu003Eu003Cliu003Eoutput:设置webpack把代码编译到哪里去,输出到哪个文件夹。这里输出目录是dist,文件名是bundle.jsu003Cu002Fliu003Eu003Cliu003EdevServer:设置webpack开发服务器,根目录是dist文件夹,并通过端口9000进行访问u003Cu002Fliu003Eu003Cu002Fulu003Eu003Cpu003Eu003Cstrongu003E10、最终的项目文件夹u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E如果你顺利的到了这一步,你的项目文件夹应该是这样的。u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002F3dec3d303c464a1b90ca84d64edbef13″ img_width=”872″ img_height=”630″ alt=”「React TS3 专题」手把手教你创建一个 React TypeScript3项目” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003Eu003Cstrongu003E11、创建启动和构建脚本u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E11.1 接下来我们使用npm命令启动我们的应用程序u003Cu002Fstrongu003E,一个用于开发模式,一个用于生产打包模式,你可以修改package.json中scripts对应的内容部分,示例如下u003Cu002Fpu003Eu003Cpreu003E{u003Cbru003E …u003Cbru003E”scripts”: {u003Cbru003E “test”: “echo \”Error: no test specified\” && exit 1″,u003Cbru003E “start”: “webpack-dev-server –env development”,u003Cbru003E “build”: “webpack –env production”u003Cbru003E },u003Cbru003E …u003Cbru003E}u003Cbru003Eu003Cu002Fpreu003Eu003Cpu003Eu003Cstrongu003E11.2 在生产打包环境中u003Cu002Fstrongu003E,我们运行如下命令,就会发现dist文件夹里,多出来了一个bundle.js文件:u003Cu002Fpu003Eu003Cpreu003Enpm run buildu003Cbru003Eu003Cu002Fpreu003Eu003Cpu003Ebundle.js 会将用到的依赖项和我们的react组件代码都编译压缩成一个文件。u003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E11.3 在开发环境中预览u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E接下来我们输入以下命令,在开发模式下进行预览u003Cu002Fpu003Eu003Cpreu003Enpm startu003Cbru003Eu003Cu002Fpreu003Eu003Cpu003Eu003Cstrongu003E11.4 接下来我们在浏览器里进行访问u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E在浏览器输入 http:u002Fu002Flocalhost:9000u002F,不出意外会看到如下效果:u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002Fa35dbf38b691477fb4dfd60939ad4c65″ img_width=”1476″ img_height=”826″ alt=”「React TS3 专题」手把手教你创建一个 React TypeScript3项目” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003Eu003Cstrongu003E11.5 接下来在应用程序仍然在运行的情况下,修改 index.tsxu003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpreu003Econst App: React.FC = () => {u003Cbru003E return <h1>My React and TypeScript App!<u002Fh1>;u003Cbru003E};u003Cbru003Eu003Cu002Fpreu003Eu003Cpu003Eu003Cstrongu003E11.6 保存index.tsx,u003Cu002Fstrongu003E我们会看到浏览器会自动刷新显示我们更新的内容:u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002Fb606363172c34102a12031159e59b59b” img_width=”1394″ img_height=”738″ alt=”「React TS3 专题」手把手教你创建一个 React TypeScript3项目” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Ch1u003E小节u003Cu002Fh1u003Eu003Cpu003E今天的内容就到这里,我们学习了如何使用 create-react-app 和 手工的两种方式创建 React TypeScript3项目。下一篇文章小编将继续给大家分享如何创建组件的主题,敬请期待…u003Cu002Fpu003Eu003Cu002Fdivu003E”

原文始发于:「React TS3 专题」手把手教你创建一个 React TypeScript3项目

主题测试文章,只做测试使用。发布者:杀手梦三刀,转转请注明出处:http://www.cxybcw.com/10720.html

联系我们

13687733322

在线咨询:点击这里给我发消息

邮件:1877088071@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code