TypeScript+React Web应用开发实战

news2025/2/26 2:27:14
  • 💂 个人网站:【 海拥】【神级代码资源网站】【办公神器】
  • 🤟 基于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.coloradmin.cn/o/1477547.html

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

相关文章

嵌入式学习day25 Linux

进程基本概念: 1.进程: 程序&#xff1a;存放在外存中的一段数据组成的文件 进程&#xff1a;是一个程序动态执行的过程,包括进程的创建、进程的调度、进程的消亡 2.进程相关命令: 1.top 动态查看当前系统中的所有进程信息&#xff08;根据CPU占用率排序&a…

54.仿简道云公式函数实战-文本函数-LOWER

1. LOWER函数 将一个文本字符串中的所有大写字母转换为小写字母 2. 函数用法 LOWER(text) 3. 函数示例 将一个文本字符串中的所有大写字母转换为小写字母。 4. 代码实战 首先我们在function包下创建text包&#xff0c;在text包下创建LowerFunction类&#xff0c;代码如下…

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

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

Kali Linux下载与安装

目录 1 kali官网下载镜像文件 2 VMware打开kali linux文件 3 启动kali-linux-2023.4操作系统 1 kali官网下载镜像文件 kali官网&#xff1a;https://www.kali.org/get-kali/#kali-platforms 进入kali官网主页后看到如图所示界面&#xff0c;左边“Installer Images”界面是…

C++:模版初阶 | STL简介

创作不易&#xff0c;感谢支持&#xff01;&#xff01; 一、泛型编程思想 如何实现一个通用的交换函数呢&#xff1f; 注&#xff1a;其实swap函数在C的标准库提供了&#xff0c;不需要自己写&#xff0c;这边只是举个例子 void Swap(int& left, int& right) { in…

Linux和Windows集群中部署HTCondor

目录 1、集群架构 2、HTCondor版本 3、Linux系统安装 3.1、HTCondor安装 3.2、中央管理节点配置 3.3、其他节点配置 4、Windwos系统安装 5、安全配置 6、参考 1、集群架构 操作系统IP地址1*Ubuntu22.04192.168.1.742Ubuntu22.04192.168.1.603Ubuntu22.04192.168.1.6…

Ansys Lumerical | 自发参量下变频 (SPDC) 光子源

附件下载 联系工作人员获取附件 此示例演示了如何对真实的光子源进行建模&#xff0c;并将其用作 qINTERCONNECT 的输入。用直波导中一个长度为L且具有χ ( 2 ) 非线性的局部区域计算I型SPDC过程的光子产生速率和波函数&#xff0c;其中泵浦光子被转换为信号和闲置光子对&…

10.广域网技术

1. PPP实验点这里&#xff08;拓扑代码&#xff09; 2. PPPoE配置实验点这里&#xff08;拓扑代码&#xff09; 目录 一、广域网二、PPP协议三、PPP链路建立过程1-LCP&#xff08;链路协商&#xff09;四、PPP链路建立过程2-PAP/CHAP&#xff08;认证协商&#xff0c;可选&…

基于x86架构的OpenHarmony应用生态挑战赛等你来战!

为了更快速推进OpenHarmony在PC领域的进一步落地&#xff0c;加快x86架构下基于OpenHarmony的应用生态的繁荣&#xff0c;为北向应用开发者提供一个更加便捷的开发环境&#xff0c;推动OpenHarmony北向应用开发者的增加&#xff0c;助力OpenHarmony在PC领域实现新的突破&#x…

工业智能网关的实际应用及其带来的变革-天拓四方

工业智能网关是一种集数据采集、传输、处理和分析于一体的智能化设备。它能够实现对工业现场各种传感器、执行器等设备的数据进行实时采集&#xff0c;并通过网络传输到云端或本地数据中心进行分析处理。同时&#xff0c;工业智能网关还具备边缘计算能力&#xff0c;能够在本地…

六、OpenAI之嵌入式(Embedding)

嵌入模式 学习怎么将文本转换成数字&#xff0c;解锁搜索等案例。 新的嵌入模型 text-embedding-3-small 和 text-embedding-3-large&#xff0c;是目前最新的并且性能最好的嵌入模型&#xff0c;成本低&#xff0c;支持多语言&#xff0c;拥有控制所有大小的新参数 1. 什么是…

Halcon 求孔洞的大小和数量

文章目录 适用场景汽车按钮案例 适用场景 在工业中可以利用孔洞的多少和孔洞的大小来分析出产品的缺陷问题&#xff0c;例如一个产品有8个孔洞&#xff0c;孔洞多和少都会被识别为不合格产品&#xff0c;或者求出孔洞的面积&#xff0c;如果孔洞的大小超出一定的范围将视为不合…

3月5日济南,2024生物发酵展全新起航!助力打造生物产业经济新时代

生物发酵是生物产业的重要组成部分&#xff0c;近年来&#xff0c;我国生物产业发展迅猛&#xff0c;生物发酵技术也已广泛应用于食品、农业、医药、饲料、日化、材料等领域&#xff0c;市场前景广阔。2022年5月&#xff0c;国家发改委发布的《“十四五”生物经济发展规划》明确…

如何识别代理服务器的IP地址?

识别一个IP地址是否是由代理服务器发出的&#xff0c;是一项具有挑战性的任务。代理服务器是一种中间网络设备&#xff0c;用于转发客户端的请求和响应&#xff0c;从而隐藏原始客户端的IP地址。由于代理服务器的广泛使用&#xff0c;识别它们对于网络安全、数据分析和市场调研…

Chat2table,简易表格分析助手

一 写在前面 之前用智谱AI的Chatglm3-6b模型写过一个简单的论文阅读助手&#xff0c;可用来辅助论文阅读等。而像表格&#xff0c;如Excel、CSV文件等内容的分析&#xff0c;也是不可忽略的需要&#xff0c;因此本文同样使用Chatglm3-6b来搭建一个表格分析助手&#xff0c;用于…

基于springboot + vue实现的前后端分离-汽车票网上预定系统(项目 + 论文)

项目介绍 系统是一个B/S模式系统&#xff0c;采用Spring Boot框架&#xff0c;MySQL 数据库设计开发&#xff0c;充分保证系统的稳定性。系统具有界面清晰、操作简单&#xff0c;功能齐全的特点&#xff0c;使得汽车票网上预订系统管理工作系统化、规范化。本系统的使用使管理人…

如何处理网络攻击对系统造成的损害?

网络攻击对系统造成的损害是当今企业面临的一大挑战。随着互联网的普及和数字化转型的加速&#xff0c;企业的运营越来越依赖于网络&#xff0c;但同时也面临着越来越多的网络安全威胁。一旦企业遭受网络攻击&#xff0c;其系统可能会遭受不同程度的损害&#xff0c;导致数据泄…

ZDH-大数据采集-支持KETTLE任务

目录 项目源码 预览地址 支持KETTLE介绍 新增KETTLE任务 配置调度KETTLE 重要说明 感谢支持 项目源码 zdh_web:GitHub - zhaoyachao/zdh_web: 大数据采集,抽取平台 预览地址 后台管理-登陆 用户名&#xff1a;zyc 密码&#xff1a;123456 支持KETTLE介绍 当前平台不…

Qt 简约美观的加载动画 小沙漏风格 第六季

这次和大家分享一个沙漏风格的加载动画 效果如下: 这是本系列的第六季了, 本次内容的关键在于cubicTo函数的使用, 在这里分享一个非常好用的网站https://www.desmos.com/calculator/cahqdxeshd 在这上面可以手动拖动贝塞尔曲线的控制点, 并且显示了起终点和两个控制点的精确坐…

Java实现Excel模板下载以及遇到的问题

Java实现Excel模板下载以及遇到的问题 前言&#xff1a; 项目在开发过程中&#xff0c;会用到Excel的导入&#xff0c;导出&#xff0c;复杂一点的Excel可以写好放在项目指定位置&#xff0c;下载时候直接从指定位置获取即可。 代码实现 excel存放的位置&#xff1a; cont…