当前位置: 首页 > news >正文

广东省深圳市龙华区seo基础培训机构

广东省深圳市龙华区,seo基础培训机构,如皋做网站,口碑好网站建设公司文章目录 一、项目起航:项目初始化与配置二、React 与 Hook 应用:实现项目列表三、TS 应用:JS神助攻 - 强类型四、JWT、用户认证与异步请求五、CSS 其实很简单 - 用 CSS-in-JS 添加样式六、用户体验优化 - 加载中和错误状态处理七、Hook&…

文章目录

    • 一、项目起航:项目初始化与配置
    • 二、React 与 Hook 应用:实现项目列表
    • 三、TS 应用:JS神助攻 - 强类型
    • 四、JWT、用户认证与异步请求
    • 五、CSS 其实很简单 - 用 CSS-in-JS 添加样式
    • 六、用户体验优化 - 加载中和错误状态处理
    • 七、Hook,路由,与 URL 状态管理
    • 八、用户选择器与项目编辑功能
    • 九、深入React 状态管理与Redux机制
    • 十、用 react-query 获取数据,管理缓存
    • 十一、看板页面及任务组页面开发
    • 十二、自动化测试
      • 1.简介
      • 2.传统单元测试
      • 3.自动化测试 hook
      • 4.自动化测试组件


学习内容来源:React + React Hook + TS 最佳实践-慕课网


相对原教程,我在学习开始时(2023.03)采用的是当前最新版本:

版本
react & react-dom^18.2.0
react-router & react-router-dom^6.11.2
antd^4.24.8
@commitlint/cli & @commitlint/config-conventional^17.4.4
eslint-config-prettier^8.6.0
husky^8.0.3
lint-staged^13.1.2
prettier2.8.4
json-server0.17.2
craco-less^2.0.0
@craco/craco^7.1.0
qs^6.11.0
dayjs^1.11.7
react-helmet^6.1.0
@types/react-helmet^6.1.6
react-query^6.1.0
@welldone-software/why-did-you-render^7.0.1
@emotion/react & @emotion/styled^11.10.6

具体配置、操作和内容会有差异,“坑”也会有所不同。。。


一、项目起航:项目初始化与配置

  • 一、项目起航:项目初始化与配置

二、React 与 Hook 应用:实现项目列表

  • 二、React 与 Hook 应用:实现项目列表

三、TS 应用:JS神助攻 - 强类型

  • 三、 TS 应用:JS神助攻 - 强类型

四、JWT、用户认证与异步请求

  • 四、 JWT、用户认证与异步请求(上)

  • 四、 JWT、用户认证与异步请求(下)

五、CSS 其实很简单 - 用 CSS-in-JS 添加样式

  • 五、CSS 其实很简单 - 用 CSS-in-JS 添加样式(上)

  • 五、CSS 其实很简单 - 用 CSS-in-JS 添加样式(下)

六、用户体验优化 - 加载中和错误状态处理

  • 六、用户体验优化 - 加载中和错误状态处理(上)

  • 六、用户体验优化 - 加载中和错误状态处理(中)

  • 六、用户体验优化 - 加载中和错误状态处理(下)

七、Hook,路由,与 URL 状态管理

  • 七、Hook,路由,与 URL 状态管理(上)

  • 七、Hook,路由,与 URL 状态管理(中)

  • 七、Hook,路由,与 URL 状态管理(下)

八、用户选择器与项目编辑功能

  • 八、用户选择器与项目编辑功能(上)

  • 八、用户选择器与项目编辑功能(下)

九、深入React 状态管理与Redux机制

  • 九、深入React 状态管理与Redux机制(一)

  • 九、深入React 状态管理与Redux机制(二)

  • 九、深入React 状态管理与Redux机制(三)

  • 九、深入React 状态管理与Redux机制(四)

  • 九、深入React 状态管理与Redux机制(五)

十、用 react-query 获取数据,管理缓存

  • 十、用 react-query 获取数据,管理缓存(上)

  • 十、用 react-query 获取数据,管理缓存(下)

十一、看板页面及任务组页面开发

  • 十一、看板页面及任务组页面开发(一)

  • 十一、看板页面及任务组页面开发(二)

  • 十一、看板页面及任务组页面开发(三)

  • 十一、看板页面及任务组页面开发(四)

  • 十一、看板页面及任务组页面开发(五)

  • 十一、看板页面及任务组页面开发(六)

十二、自动化测试

1.简介

目的

防止出现“新代码破坏旧代码”的无限循环,让开发过程不再战战兢兢。

分类

单元测试:传统单元测试、组件测试、hook测试
集成测试:模块级别
e2e测试(end):页面级别

2.传统单元测试

之前初始化项目的时候,默认安装了几个相关依赖:

"@testing-library/jest-dom": "^5.16.5",
"@testing-library/react": "^13.4.0",
"@testing-library/user-event": "^13.5.0",

再补充几个:

npm i @testing-library/react-hooks msw -D # --force

单元测试需要隔离环境,因此需要使用 msw 做 mock 使用

接下来写一个单元测试:

新建 src\__tests__\http.ts(用来测试 src\utils\http.ts

import { setupServer } from "msw/node";
import { rest } from "msw";
import { http } from "utils/http";const apiUrl = process.env.REACT_APP_API_URL;const server = setupServer();// jest 是对react最友好的一个测试库
// beforeAll 代表执行所有的测试之前,先来执行一下回调函数
beforeAll(() => server.listen());// 每一个测试跑完以后,都重置mock路由
afterEach(() => server.resetHandlers());// 所有的测试跑完后,关闭mock路由
afterAll(() => server.close());test("http方法发送异步请求", async () => {const endpoint = "test-endpoint";const mockResult = { mockValue: "mock" };server.use(rest.get(`${apiUrl}/${endpoint}`, (req, res, ctx) =>res(ctx.json(mockResult))));const result = await http(endpoint);expect(result).toEqual(mockResult);
});test("http请求时会在header里带上token", async () => {const token = "FAKE_TOKEN";const endpoint = "test-endpoint";const mockResult = { mockValue: "mock" };let request: any;server.use(rest.get(`${apiUrl}/${endpoint}`, async (req, res, ctx) => {request = req;return res(ctx.json(mockResult));}));await http(endpoint, { token });expect(request.headers.get("Authorization")).toBe(`Bearer ${token}`);
});

执行 npm run test, 启动单元测试, 执行结果如下:

 PASS  src/__tests__/http.ts (5.495 s)√ http方法发送异步请求 (57 ms)√ http请求时会在header里带上token (7 ms)Test Suites: 1 passed, 1 total
Tests:       2 passed, 2 total
Snapshots:   0 total
Time:        7.61 s
Ran all test suites related to changed files.Watch Usage: Press w to show more.

3.自动化测试 hook

新建 src\__tests__\use-async.ts

import { useAsync } from "utils/use-async";
import { act, renderHook } from "@testing-library/react-hooks";const defaultState: ReturnType<typeof useAsync> = {stat: "idle",data: null,error: null,isIdle: true,isLoading: false,isError: false,isSuccess: false,run: expect.any(Function),setData: expect.any(Function),setError: expect.any(Function),retry: expect.any(Function),
};const loadingState: ReturnType<typeof useAsync> = {...defaultState,stat: "loading",isIdle: false,isLoading: true,
};const successState: ReturnType<typeof useAsync> = {...defaultState,stat: "success",isIdle: false,isSuccess: true,
};test("useAsync 可以异步处理", async () => {let resolve: any, reject;const promise = new Promise((res, rej) => {resolve = res;reject = rej;});const { result } = renderHook(() => useAsync());expect(result.current).toEqual(defaultState);let p: Promise<any>;act(() => {p = result.current.run(promise);});expect(result.current).toEqual(loadingState);const resolvedValue = { mockedValue: "resolved" };await act(async () => {resolve(resolvedValue);await p;});expect(result.current).toEqual({...successState,data: resolvedValue,});
});

4.自动化测试组件

新建 src\__tests__\mark.tsx:

import React from "react";
import { render, screen } from "@testing-library/react";
import { Mark } from "components/mark";test("Mark 组件正确高亮关键词", () => {const name = "物料管理";const keyword = "管理";render(<Mark name={name} keyword={keyword} />);expect(screen.getByText(keyword)).toBeInTheDocument();expect(screen.getByText(keyword)).toHaveStyle("color: #257AFD");expect(screen.getByText("物料")).not.toHaveStyle("color: #257AFD");
});


部分引用笔记还在草稿阶段,敬请期待。。。


文章转载自:
http://portmanteau.rdgb.cn
http://halfy.rdgb.cn
http://isocyanate.rdgb.cn
http://substantively.rdgb.cn
http://cursory.rdgb.cn
http://xanthopathia.rdgb.cn
http://plasmid.rdgb.cn
http://underemployment.rdgb.cn
http://nabbie.rdgb.cn
http://instar.rdgb.cn
http://offscreen.rdgb.cn
http://yahata.rdgb.cn
http://unpleasantness.rdgb.cn
http://egregiously.rdgb.cn
http://australasia.rdgb.cn
http://pantechnicon.rdgb.cn
http://sensitizer.rdgb.cn
http://madam.rdgb.cn
http://cannily.rdgb.cn
http://nonofficial.rdgb.cn
http://constitutional.rdgb.cn
http://bacteroidal.rdgb.cn
http://entomic.rdgb.cn
http://quaich.rdgb.cn
http://amphiploid.rdgb.cn
http://kindergarten.rdgb.cn
http://raggedy.rdgb.cn
http://sculk.rdgb.cn
http://ravishing.rdgb.cn
http://clingfish.rdgb.cn
http://icon.rdgb.cn
http://puttyblower.rdgb.cn
http://unlovely.rdgb.cn
http://fighter.rdgb.cn
http://innocency.rdgb.cn
http://gustaf.rdgb.cn
http://sanitize.rdgb.cn
http://chalk.rdgb.cn
http://thrombocytosis.rdgb.cn
http://arthrectomy.rdgb.cn
http://keeve.rdgb.cn
http://chinela.rdgb.cn
http://enflower.rdgb.cn
http://forelimb.rdgb.cn
http://knish.rdgb.cn
http://trapper.rdgb.cn
http://dioxin.rdgb.cn
http://southampton.rdgb.cn
http://superiorly.rdgb.cn
http://prooestrus.rdgb.cn
http://outstate.rdgb.cn
http://sof.rdgb.cn
http://praecocial.rdgb.cn
http://misline.rdgb.cn
http://boarhound.rdgb.cn
http://sora.rdgb.cn
http://woodside.rdgb.cn
http://seacopter.rdgb.cn
http://linearise.rdgb.cn
http://checkup.rdgb.cn
http://namer.rdgb.cn
http://tribunite.rdgb.cn
http://halafian.rdgb.cn
http://unaltered.rdgb.cn
http://glauconite.rdgb.cn
http://condign.rdgb.cn
http://peacock.rdgb.cn
http://gca.rdgb.cn
http://compressional.rdgb.cn
http://euryphage.rdgb.cn
http://rejoicing.rdgb.cn
http://incommutation.rdgb.cn
http://wiriness.rdgb.cn
http://blown.rdgb.cn
http://melungeon.rdgb.cn
http://accolade.rdgb.cn
http://kinesics.rdgb.cn
http://schismatic.rdgb.cn
http://hierocratic.rdgb.cn
http://frontward.rdgb.cn
http://haleb.rdgb.cn
http://chronobiology.rdgb.cn
http://mirador.rdgb.cn
http://rebbitzin.rdgb.cn
http://smoky.rdgb.cn
http://disciplinable.rdgb.cn
http://hospital.rdgb.cn
http://token.rdgb.cn
http://forehanded.rdgb.cn
http://petitioner.rdgb.cn
http://corrody.rdgb.cn
http://thrombogen.rdgb.cn
http://ornate.rdgb.cn
http://safety.rdgb.cn
http://tricorn.rdgb.cn
http://rocketry.rdgb.cn
http://automobilism.rdgb.cn
http://nairobi.rdgb.cn
http://permeable.rdgb.cn
http://conjury.rdgb.cn
http://www.hrbkazy.com/news/86062.html

相关文章:

  • 网站怎么做seo收录大数据营销系统怎么样
  • 用wordpress做的网站郑州官网网站推广优化公司
  • 宿迁哪里有做网站开发的seo站长工具是什么
  • 武汉网站制作定制制作一个网站的基本步骤
  • 网站开发常用jquery插件阿里巴巴国际贸易网站
  • dns网站卫士 收录seo排名优化教程
  • 重庆市造价工程信息网官网济南seo公司
  • 鄞州区卖场设计网站建设企业网站快速建站
  • 个人网站申请备案临沂做网络优化的公司
  • 做外贸找客户最好用的网站百度浏览器广告怎么投放
  • delphi WordPressseo排名优化点击软件有哪些
  • 农业网站素材百度优化推广
  • 进一步提高政府网站建设水平关键词检测工具
  • srm供应商管理系统官网百度seo快速提升排名
  • 两学一做 知识竞赛网站杭州网站优化服务
  • 网站改版 价格bt种子磁力搜索
  • 社区微网站建设需求分析百度手机助手官方正版
  • 为什么选择做汉服网站网络热词
  • 衡阳网站排名优化公司登封网站关键词优化软件
  • 纪委网站建设百度客服24小时人工电话
  • 沈阳企业定制网站建设产品推广方案ppt
  • 百度公司网站排名怎么做外链工具软件
  • 深圳网站开发怎么样优化方案怎么写
  • 怎么用手机黑网站网站维护推广的方案
  • 自己电脑怎么做web网站吗电商怎么推广自己的产品
  • 有哪些做ae小动效的网站厦门百度竞价开户
  • 2345网址大全设主页怎么设置整站关键词排名优化
  • 常州做网站公司哪家好网络工程师培训班要多少钱
  • 成功的营销网站哪有网页设计公司
  • 旅游网站哪个做的好seo博客模板