TypeScript+React Web应用开发实战

  • 💂 个人网站:【 海拥】【神级代码资源网站】【办公神器】
  • 🤟 基于Web端打造的:👉轻量化工具创作平台
  • 💅 想寻找共同学习交流的小伙伴,请点击【全栈技术交流群】

在现代Web开发中,React和TypeScript已经成为了非常流行的技术组合。React是一个用于构建用户界面的JavaScript库,而TypeScript是JavaScript的超集,它添加了类型系统和其他功能。本文将介绍如何使用TypeScript和React进行Web应用开发实战。

1. 环境搭建

首先,我们需要搭建开发环境。确保已经安装了Node.js,然后使用以下命令安装Create React App脚手架工具:

npx create-react-app my-app --template typescript  

这将创建一个名为my-app的React项目,并使用TypeScript模板。接下来,进入项目目录并启动开发服务器:

cd my-app
npm start 

2. 组件开发

React的核心概念是组件。我们可以使用TypeScript来定义组件的类型,以便更好地管理和维护代码。以下是一个简单的组件示例:

import React, { useState } from 'react';interface Props {initialCount: number;
}const MyComponent: React.FC<Props> = ({ initialCount }) => {const [count, setCount] = useState(initialCount);const handleIncrement = () => {setCount(count + 1);};return (<div><p>Count: {count}</p><button onClick={handleIncrement}>Increment</button></div>);
};export default MyComponent;   

在这个例子中,我们定义了一个名为MyComponent的函数式组件,它接受一个名为initialCount的属性。我们还使用了useState Hook来管理组件的状态。

3. 路由管理

在实际项目中,我们需要处理多个页面和路由。可以使用React Router库来实现路由管理。首先,安装React Router:

npm install react-router-dom

然后,创建一个路由配置文件,例如Routes.tsx

import React from 'react';
import { BrowserRouter as Router, Switch, Route } from 'react-router-dom';
import HomePage from './pages/HomePage';
import AboutPage from './pages/AboutPage';const Routes: React.FC = () => {return (<Router><Switch><Route exact path="/" component={HomePage} /><Route path="/about" component={AboutPage} /></Switch></Router>);
};export default Routes;

在这个例子中,我们使用了BrowserRouter、Switch和Route组件来定义路由规则。我们还导入了两个页面组件:HomePage和AboutPage。

4. 状态管理

在复杂的应用中,我们需要管理全局状态。可以使用Redux或者Context API来实现状态管理。这里以Redux为例,首先安装Redux和相关库:

npm install redux react-redux @types/react-redux @types/redux   

然后,创建一个简单的Redux store:

// store.tsx
import { createStore } from 'redux';
import { Provider } from 'react-redux';interface State {count: number;
}const initialState: State = {count: 0,
};function reducer(state = initialState, action: any) {switch (action.type) {case 'INCREMENT':return { ...state, count: state.count + 1 };default:return state;}
}const store = createStore(reducer);export { store, State };  

接下来,修改index.tsx文件,引入Provider和store:

import React from 'react';
import ReactDOM from 'react-dom';
import { Provider } from 'react-redux';
import { store, State } from './store';
import Routes from './Routes';ReactDOM.render(<Provider store={store}><Routes /></Provider>,document.getElementById('root')
);  

最后,修改MyComponent组件,使其能够读取和修改Redux store中的count值:

import React, { useState } from 'react';
import { useSelector, useDispatch } from 'react-redux';interface Props {initialCount?: number;
}const MyComponent: React.FC<Props> = ({ initialCount }) => {const count = useSelector((state: State) => state.count);const dispatch = useDispatch();const handleIncrement = () => {dispatch({ type: 'INCREMENT' });};return (<div><p>Count: {count}</p><button onClick={handleIncrement}>Increment</button></div>);
};export default MyComponent;  

5. 样式和主题

为了提高项目的可维护性,我们可以使用CSS模块来编写样式。只需将CSS文件的扩展名更改为.module.css,然后在组件中导入即可。例如,创建一个名为MyComponent.module.css的文件:

/* MyComponent.module.css */
.container {background-color: lightblue;padding: 16px;
}  

然后在MyComponent组件中导入和使用这个样式:

import React, { useState } from 'react';
import styles from './MyComponent.module.css';// ...省略其他代码...return (<div className={styles.container}><p>Count: {count}</p><button onClick={handleIncrement}>Increment</button></div>
);    

此外,我们可以使用Styled-components库来实现主题切换。首先,安装Styled-components:

npm install styled-components  

然后,创建一个主题配置文件,例如theme.ts

// theme.ts
export const lightTheme = {backgroundColor: '#fff',textColor: '#000',
};export const darkTheme = {backgroundColor: '#000',textColor: '#fff',
};   

接下来,使用Styled-components创建一个可切换主题的组件:

import React, { useState } from 'react';
import { ThemeProvider, createGlobalStyle } from 'styled-components';
import { lightTheme, darkTheme } from './theme';const GlobalStyle = createGlobalStyle`body {background-color: ${props => props.theme.backgroundColor};color: ${props => props.theme.textColor};}
`;const ThemedButton = styled.button`background-color: ${props => props.theme.backgroundColor};color: ${props => props.theme.textColor};
`;const ThemeSwitcher: React.FC = () => {const [theme, setTheme] = useState(lightTheme);const handleThemeSwitch = () => {setTheme(theme === lightTheme ? darkTheme : lightTheme);};return (<ThemeProvider theme={theme}><GlobalStyle /><ThemedButton onClick={handleThemeSwitch}>Switch Theme</ThemedButton></ThemeProvider>);
};export default ThemeSwitcher;  

6. 性能优化

在开发过程中,我们需要关注应用的性能。可以使用React的shouldComponentUpdate方法或React.memo函数来避免不必要的渲染。此外,还可以使用Webpack等工具进行代码分割和懒加载。这里以React.memo为例:

import React, { useState, memo } from 'react';interface Props {initialCount: number;
}const MyComponent: React.FC<Props> = ({ initialCount }) => {// ...省略其他代码...
};export default memo(MyComponent); 

通过使用React.memo,我们可以确保只有当props发生变化时,组件才会重新渲染。这有助于提高应用的性能。

⭐️ 好书推荐

《TypeScript+React Web应用开发实战 》

在这里插入图片描述

【内容简介】

本书适应于当今前端开发的流行趋势,注重理论与实战相结合的思想,配合大量的、基础且实用的代码实例,帮助读者学习基于TypeScript语言规范的React框架开发的相关知识。全书内容通俗易懂、覆盖面广、充分翔实、重点突出,涵盖了TypeScript语言规范和React框架开发的方方面面。

全书内容共10章,TypeScript语言部分包括TypeScript语言基础与开发环境的搭建、TypeScript项目开发与配置、TypeScript语法规范和TypeScript语法高级特性等方面的内容;React框架部分包括React框架基础与开发环境的搭建,React语法、组件、状态与生命周期,React框架高级指引和React Hook新特性等方面的内容。同时,为了突出本书项目实战的特点,针对性地开发了两个Web项目应用,以帮助读者深入学习基于TypeScript + React技术的开发流程。

📚 京东购买链接:《TypeScript+React Web应用开发实战 》

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

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

相关文章

c#/ .net8 香橙派orange pi +SSD1306 oled显示屏 显示中文+英文 实例

本文使用香橙派orangepi pi 3ltsSSD1306 oled显示屏作为例子&#xff0c;其它型号的也是一样使用的 在nuget包中安装 Sang.IoT.SSD1306; 以下两个二选一 SkiaSharp;//在window下运行装这个 SkiaSharp.NativeAssets.Linux.NoDependencies;//在linux下运行一定要装这个 在c# .ne…

unity shaderGraph实例-物体线框显示

文章目录 本项目基于URP实现一&#xff0c;读取UV网格&#xff0c;由自定义shader实现效果优缺点效果展示模型准备整体结构各区域内容区域1区域2区域3区域4shader属性颜色属性材质属性后处理 实现二&#xff0c;直接使用纹理&#xff0c;使用默认shader实现优缺点贴图准备材质准…

普通索引和唯一索引详解

前言 面试的时候有时会问面试者&#xff0c;普通索引和唯一索引有什么区别。很多人&#xff0c;甚至工作很多年的工程师回答的千篇一律 “普通索引可以有重复的值&#xff0c;唯一索引不能有重复的值”。于是我又问&#xff0c;这两个索引这两个索引效率哪个高&#xff0c;很少…

腾讯云优惠购买政策大全:新老用户都来瞧瞧!

腾讯云服务器多少钱一年&#xff1f;62元一年起&#xff0c;2核2G3M配置&#xff0c;腾讯云2核4G5M轻量应用服务器218元一年、756元3年&#xff0c;4核16G12M服务器32元1个月、312元一年&#xff0c;8核32G22M服务器115元1个月、345元3个月&#xff0c;腾讯云服务器网txyfwq.co…

script中的defer和async

在HTML中&#xff0c;<script>标签可以使用async和defer两个属性来控制外部JavaScript文件的加载和执行方式。这两个属性的目的是优化页面加载时间&#xff0c;但它们以不同的方式工作。下面是每个属性的具体说明&#xff1a; async属性 当你给<script>标签添加a…

pwa应用打开自动跳转到某个网页网址,并且全屏不显示网址url,就像这个网页也具备了pwa功能

问题描述 如果是只要在同一个域名下配置了pwa功能,那么当从桌面上打开这个pwa软件时,就会像真正的app运行一样,全屏显示,并且不显示网址的,但是如果要动态配置打开pwa时动态加载不同的网址,使用 window.location.href = “网址”这种形式重定向url就会导致pwa出现地址栏…

【MySQL】基本查询(表的增删改查)-- 详解

CRUD&#xff1a;Create&#xff08;创建&#xff09;&#xff0c;Retrieve&#xff08;读取&#xff09;&#xff0c;Update&#xff08;更新&#xff09;&#xff0c;Delete&#xff08;删除&#xff09;。 一、Create insert [into] table_name [(column [, column] ...)] v…

Unity中URP实现水体(水的焦散)

文章目录 前言一、原理1、 通过深度图&#xff0c;得到 对应像素 在 世界空间下的Z值2、得到模型顶点在 观察空间 下的坐标3、由以上两点得到 深度图像素 对应的 xyz 值4、最后&#xff0c;转化到 模型本地空间下&#xff0c;用其对焦散纹理采样 二、实现1、获取深度图2、在顶点…

警惕!2本期刊被剔除!2024年2月Scopus期刊目录已更新!

【SciencePub学术】 ​2024年2月&#xff0c;Scopus数据库迎来本年度第二次更新&#xff01;此次更新后&#xff0c;有94本期刊发生变动&#xff1a; • 剔除&#xff1a;有2本期刊不再被Scopus数据库收录&#xff08;Discontinued titles Jan. 2024&#xff09;&#xff1b; …

【低代码开发_RuoYi_框架】RuoYi框架_前端页面部署/搭建

开源软件的影响力 随着信息技术的快速发展&#xff0c;开源软件已经成为软件开发的趋势&#xff0c;并产生了深远的影响。开源软件的低成本、可协作性和透明度等特点&#xff0c;使得越来越多的企业和个人选择使用开源软件&#xff0c;促进了软件行业的繁荣。然而&#xff0c;…

在线原型工具有哪些比较好用?

随着云计算和5G网络的发展&#xff0c;互联网办公工具的发展 Web 这是一个不可避免的趋势。那么&#xff0c;对于产品设计团队来说&#xff0c;哪些在线设计工具值得体验呢&#xff1f;今天&#xff0c;让我们来看看一些国内外经典的在线原型工具。 即时设计 - 可实时协作的专…

比特币逼近历史高点,ETF疯了,Coinbase崩了,尼日利亚抓人了

2月28日&#xff0c;比特币冲高回落&#xff0c;加密货币交易所Coinbase则因宕机上演了一波“0元惊魂”。 比特币隔夜美股盘中突然飙高&#xff0c;突破6.4万美元大关&#xff0c;距历史新高仅一步之遥&#xff0c;但随后回落&#xff0c;几分钟之内就跌了5000美元&#xff0c…

2022年上半年教师资格证考试《综合素质》(中学)题

4.某校在初三年级实行两张课程表&#xff0c;一张公开的应对检查&#xff0c;一张不公开的实际执行&#xff0c;以提高升学率。对于该校做法&#xff0c;正确的是&#xff08;C &#xff09;。 A遵循了学科教学的基本规则 B降低了学生学习的效率 C漠视了学生全面发展的需要 …

vue3 + TS + vite 搭建中后台管理系统(开箱即用)

[TOC](vue3 TS vite 搭建中后台管理系统) 开箱即用 前言 要成功&#xff0c;先发疯&#xff0c;头脑简单往前冲&#xff01; 三金四银&#xff0c;金九银十&#xff0c;多学知识&#xff0c;也不能埋头苦干&#xff0c;要成功&#xff0c;先发疯&#xff0c;头脑简单往前冲…

linux系统---nginx(3)核心配置指令及调优

目录 Nginx 核心配置指令 一、Nginx配置文件详解 1、配置文件目录 2、配置文件结构 二、调优 1、在全局域进行的调优 1.1线程池指令 1.2 工作进程数指令 2.1 工作进程并非数指令 2.2 事件处理机制选择指令 2.3 互斥锁指令 3、在http指令域的调优 3.1 Nginx端口监听…

JAVA SE 2.基本语法

1.Java的基本语法 1.Java代码的基本格式修饰符 class 类名{程序代码 } 例: public class Test{public static void main(String[] args){} }语法说明 1.Java程序代码都必须放在类中&#xff0c;类需要用class关键字定义&#xff0c;class前面可以有修饰符2.当类不是定义在java.…

Redis学习------实战篇----2024/02/28

1.集群的session共享问题 2.基于Redis实现共享session登录 //4.保存验证码到redisstringRedisTemplate.opsForValue().set(LOGIN_CODE_KEYphone,code,LOGIN_CODE_TTL, TimeUnit.MINUTES);RedisTemplate RedisTemplate使用的是JdkSerializationRedisSerializer存入数据&#xff…

java面试题之nginx篇

1. 什么是Nginx&#xff1f; Nginx是一个 轻量级/高性能的反向代理Web服务器&#xff0c;他实现非常高效的反向代理、负载平衡&#xff0c;他可以处理2-3万并发连接数&#xff0c;官方监测能支持5万并发&#xff0c;现在中国使用nginx网站用户有很多&#xff0c;例如&#xff…

Linux NFC 子系统剖析

1.总览 linux源码中NFC在net/nfc下&#xff0c;文件结构如下图&#xff1a; hci&#xff1a;Host Controller Interface 主要是针对NFC的主机-控制器接口协议 nci&#xff1a;NFC Controller Interface 主要是NFC的控制器接口协议&#xff0c;用于NFCC(NFC Controller)和DH(…