自贡市建设局网站2016网站设计

pingmian/2025/10/13 13:25:28/文章来源:
自贡市建设局网站,2016网站设计,江苏苏州有什么好玩的,免费网络正能量直接进入文章目录 一、项目起航#xff1a;项目初始化与配置二、React 与 Hook 应用#xff1a;实现项目列表三、TS 应用#xff1a;JS神助攻 - 强类型四、JWT、用户认证与异步请求五、CSS 其实很简单 - 用 CSS-in-JS 添加样式六、用户体验优化 - 加载中和错误状态处理七、Hook… 文章目录 一、项目起航项目初始化与配置二、React 与 Hook 应用实现项目列表三、TS 应用JS神助攻 - 强类型四、JWT、用户认证与异步请求五、CSS 其实很简单 - 用 CSS-in-JS 添加样式六、用户体验优化 - 加载中和错误状态处理七、Hook路由与 URL 状态管理八、用户选择器与项目编辑功能九、深入React 状态管理与Redux机制十、用 react-query 获取数据管理缓存十一、看板页面及任务组页面开发1~34~67.编辑任务功能8.看板和任务删除功能 学习内容来源React React Hook TS 最佳实践-慕课网 相对原教程我在学习开始时2023.03采用的是当前最新版本 项版本react react-dom^18.2.0react-router react-router-dom^6.11.2antd^4.24.8commitlint/cli commitlint/config-conventional^17.4.4eslint-config-prettier^8.6.0husky^8.0.3lint-staged^13.1.2prettier2.8.4json-server0.17.2craco-less^2.0.0craco/craco^7.1.0qs^6.11.0dayjs^1.11.7react-helmet^6.1.0types/react-helmet^6.1.6react-query^6.1.0welldone-software/why-did-you-render^7.0.1emotion/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~3 十一、看板页面及任务组页面开发一 4~6 十一、看板页面及任务组页面开发二 7.编辑任务功能 接下来新建编辑任务的组件 先准备好调用编辑任务接口和获取任务详情的 Hook编辑 src\utils\task.ts ... import { useAddConfig, useEditConfig } from ./use-optimistic-options;export const useEditTask (queryKey: QueryKey) {const client useHttp();return useMutation((params: PartialTask) client(tasks/${params.id}, {method: PATCH,data: params,}),useEditConfig(queryKey)); };export const useTask (id?: number) {const client useHttp();return useQueryTask([task, id], () client(tasks/${id}), {enabled: Boolean(id),}); };编辑 src\screens\ViewBoard\utils.ts(新增 useTasksModal) ... // import { useDebounce } from utils; import { useTask } from utils/task; ...export const useTasksSearchParams () {const [param] useUrlQueryParam([name,typeId,processorId,tagId,]);const projectId useProjectIdInUrl();// const debouncedName useDebounce(param.name)return useMemo(() ({projectId,typeId: Number(param.typeId) || undefined,processorId: Number(param.processorId) || undefined,tagId: Number(param.tagId) || undefined,// name: debouncedName,name: param.name,}),// [projectId, param, debouncedName][projectId, param]); };...export const useTasksModal () {const [{ editingTaskId }, setEditingTaskId] useUrlQueryParam([editingTaskId])const { data: editingTask, isLoading } useTask(Number(editingTaskId))const startEdit useCallback((id: number) {setEditingTaskId({editingTaskId: id})}, [setEditingTaskId])const close useCallback(() {setEditingTaskId({editingTaskId: })}, [setEditingTaskId])return {editingTaskId,editingTask,startEdit,close,isLoading} }视频中使用 useDebounce 使得完全停止输入后才开始搜索避免输入过程中频繁搜索造成系统资源浪费且影响用户体验博主这样更改后中文输入法无法正常使用。。。后续再解决 新建组件src\screens\ViewBoard\components\taskModal.tsx import { useForm } from antd/lib/form/Form import { useTasksModal, useTasksQueryKey } from ../utils import { useEditTask } from utils/task import { useEffect } from react import { Form, Input, Modal } from antd import { UserSelect } from components/user-select import { TaskTypeSelect } from components/task-type-selectconst layout {labelCol: {span: 8},wrapperCol: {span: 16} }export const TaskModal () {const [form] useForm()const { editingTaskId, editingTask, close } useTasksModal()const { mutateAsync: editTask, isLoading: editLoading } useEditTask(useTasksQueryKey())const onCancel () {close()form.resetFields()}const onOk async () {await editTask({...editingTask, ...form.getFieldsValue()})close()}useEffect(() {form.setFieldsValue(editingTask)}, [form, editingTask])return ModalforceRender{true}onCancel{onCancel}onOk{onOk}okText{确认}cancelText{取消}confirmLoading{editLoading}title{编辑任务}open{!!editingTaskId}Form {...layout} initialValues{editingTask} form{form}Form.Itemlabel{任务名}name{name}rules{[{ required: true, message: 请输入任务名 }]}Input //Form.ItemForm.Item label{经办人} name{processorId}UserSelect defaultOptionName{经办人} //Form.ItemForm.Item label{类型} name{typeId}TaskTypeSelect //Form.Item/Form/Modal }注意与 Drawer 一样在Modal 组件中使用通过 useForm() 提取的 form 绑定的 Form 时需要添加 forceRender 属性否则在页面打开时绑定不到会有报错参见【实战】React 实战项目常见报错 —— Instance created by ‘useForm’ is not connected to any Form element. Forget… 编辑src\screens\ViewBoard\index.tsx引入 TaskModal ... import { TaskModal } from ./components/taskModal;export const ViewBoard () {...return (ViewContainer...TaskModal//ViewContainer); }; ...编辑src\screens\ViewBoard\components\ViewboardCloumn.tsx引入 useTasksModal 使得点击 任务卡片 可以打开 TaskModal 进行编辑 ... import { useTasksModal, useTasksSearchParams } from ../utils; ...export const ViewboardColumn ({ viewboard }: { viewboard: Viewboard }) {...const { startEdit } useTasksModal()return (Container...TasksContainer{tasks?.map((task) (Card onClick{() startEdit(task.id)} style{{ marginBottom: 0.5rem, cursor: pointer }} key{task.id}.../Card))}.../TasksContainer/Container); }; ...查看功能和效果点击 任务卡片 后 TaskModal 出现编辑并确认后即可看到修改后的任务用了乐观更新完全无感 8.看板和任务删除功能 接下来先实现一个小功能搜索结果中关键字高亮 新建 src\screens\ViewBoard\components\mark.tsx export const Mark ({name, keyword}: {name: string, keyword: string}) {if(!keyword) {return {name}/}const arr name.split(keyword)return {arr.map((str, index) span key{index}{str}{index arr.length -1 ? null : span style{{ color: #257AFD }}{keyword}/span}/span)}/ }编辑 src\screens\ViewBoard\components\ViewboardCloumn.tsx引入 Task 并将 TaskCard 单独提取出来 ... import { Task } from types/Task; import { Mark } from ./mark;...const TaskCard ({task}: {task: Task}) {const { startEdit } useTasksModal();const { name: keyword } useTasksSearchParams()return CardonClick{() startEdit(task.id)}style{{ marginBottom: 0.5rem, cursor: pointer }}key{task.id}pMark keyword{keyword} name{task.name}//pTaskTypeIcon id{task.id} //Card }export const ViewboardColumn ({ viewboard }: { viewboard: Viewboard }) {const { data: allTasks } useTasks(useTasksSearchParams());const tasks allTasks?.filter((task) task.kanbanId viewboard.id);return (Containerh3{viewboard.name}/h3TasksContainer{tasks?.map((task) TaskCard task{task}/)}CreateTask kanbanId{viewboard.id} //TasksContainer/Container); }; ...查看效果 下面开始开发删除功能 编辑 src\utils\viewboard.ts创建并导出 useDeleteViewBoard ... export const useDeleteViewBoard (queryKey: QueryKey) {const client useHttp();return useMutation((id?: number) client(kanbans/${id}, {method: DELETE,}),useDeleteConfig(queryKey)); };编辑 src\screens\ViewBoard\components\ViewboardCloumn.tsx ... import { Button, Card, Dropdown, MenuProps, Modal, Row } from antd; import { useDeleteViewBoard } from utils/viewboard;...export const ViewboardColumn ({ viewboard }: { viewboard: Viewboard }) {const { data: allTasks } useTasks(useTasksSearchParams());const tasks allTasks?.filter((task) task.kanbanId viewboard.id);return (ContainerRowh3{viewboard.name}/h3More viewboard{viewboard}//RowTasksContainer{tasks?.map((task) TaskCard task{task}/)}CreateTask kanbanId{viewboard.id} //TasksContainer/Container); };const More ({ viewboard }: { viewboard: Viewboard }) {const {mutateAsync: deleteViewBoard} useDeleteViewBoard(useViewBoardQueryKey())const startDelete () {Modal.confirm({okText: 确定,cancelText: 取消,title: 确定删除看板吗,onOk() {deleteViewBoard(viewboard.id)}})}const items: MenuProps[items] [{key: 1,label: 删除,onClick: startDelete,},];return Dropdown menu{{ items }}Button typelink onClick{(e) e.preventDefault()}.../Button/Dropdown } ...测试一下删除看板功能正常 下面是删除任务功能 编辑 src\utils\task.ts创建并导出 useDeleteTask ... export const useDeleteTask (queryKey: QueryKey) {const client useHttp();return useMutation((id?: number) client(tasks/${id}, {method: DELETE,}),useDeleteConfig(queryKey)); };编辑 src\screens\ViewBoard\components\taskModal.tsx ... import { useDeleteTask, useEditTask } from utils/task;export const TaskModal () {...const { mutateAsync: deleteTask } useDeleteTask(useTasksQueryKey());...const startDelete () {close();Modal.confirm({okText: 确定,cancelText: 取消,title: 确定删除看板吗,onOk() {deleteTask(Number(editingTaskId));}})}return (Modal {...}Form {...}.../Formdiv style{{ textAlign: right }}Button style{{fontSize: 14px}} sizesmall onClick{startDelete}删除/Button/div/Modal); };测试一下删除任务功能正常 部分引用笔记还在草稿阶段敬请期待。。。

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

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

相关文章

汕头网站制作公司的网站怎么运营

测序深度(Sequencing Depth)是指:测序得到的碱基总量(bp)与基因组(转录组或测序目标区域大小)的比值,是评价测序量的指标之一。 测序深度的计算公式为: 测序深度 &…

肇庆北滘网站设计企业网站建设首页要写什么内容

git remote prune origin --同步远程分支到本地 git reflog --dateiso --查看历史记录详细信息

合肥模板网站建设收费如何做网站推广页面

服务器网络卡,一般情况下,请先检查您服务器的使用情况。 1.CPU使用率是否大于50%。 2.网络使用率是否过高。 3.内存使用率是否过高。 如果出现上述情况,则表明您的服务器或网络无法承载您目前的服务,请联系技术人员调整您的资…

苏州企业如何建站windows部署网站php

全世界只有3.14 % 的人关注了爆炸吧知识真正决定人与人之间的差距的,其实是我们对事物的见识与内心的格局,见识的深浅决定人生的深浅,格局的大小决定了人生之路是宽是窄。今天给大家推荐几个有深度、有想法的公众号,希望能够给你带…

网站设计培训哪里好北京网站建设是什么意思

可视化文件编辑与SSH传输神器WinSCP如何公网远程本地服务器 文章目录 可视化文件编辑与SSH传输神器WinSCP如何公网远程本地服务器1. 简介2. 软件下载安装:3. SSH链接服务器4. WinSCP使用公网TCP地址链接本地服务器5. WinSCP使用固定公网TCP地址访问服务器 1. 简介 …

网站建设的七个流程步骤网站备案背景幕布打印多大

可以《《透视 HTTP 协议》Windows 10 搭建最小实验环境》搭建环境,之后才能进行下边的操作。 1.鼠标左键点击两下www目录下的start.bat批处理文件。 2.打开Wireshark,然后选择Adapter for loopback traffic capture。 3.然后把tcp.port 80 || udp.…

泉州网站建设工作室网址导航网址大全彩票网站大全

目录 一、引言 二、WinPlan的市场预测功能 三、WinPlan的决策制定功能 四、WinPlan的应用价值

深圳企业网站开发费用html代码中标签的书写不区分大小写

文章目录 一、简介二、vdso2.1 用户态2.2 内核态2.3 内核源码解析 参考资料 一、简介 Linux中的vdso(Virtual Dynamic Shared Object)是一种特殊的动态共享对象,它在用户空间和内核空间之间提供了一种高效的接口。vdso机制的目的是减少用户空…

哪里有做ppt的网站移动商务网站开发课程

在 javascript 中,我们常常用 typeof 运算符来检测对象的类型,在使用 typeof 检测引用类型的存储值会出现一个问题,无论引用的是什么类型的对象,它都会返回 "object"。这个时候我们往往会使用 instanceof instanceof 可…

黄浦区seo网站建设简单网站制作

目录 前言 基于激光雷达和相机的路侧感知系统需求分析及设计 2.1 引言 2.2 感知系统总体结构

容桂网站制作信息在人才网站做业务

分享是最好的整理,利用csdn 平台保存一下

统计局网站建设情况千万不要做手游推广员

目录 前置知识循环依赖的产生Spring里面的3个Map 课程内容一、只有一级缓存的推理演进1.1 直接将实例化后生成的对象放入到单例池里面1.1 引入一个中间Map存实例化后的早期对象(疑似二级缓存)1.3 解决1.2需要被代理的问题(疑似二级缓存&#…

网站平台建设招标书中国外贸论坛

教育 -航空概论-章节资料考试资料-郑州航空工业管理学院【】 第1部分单元作业 第1部分单元测验 1、【单选题】航空是指载人或不载人的飞行器在地球 的航行活动。 A、高空 B、大气层内 C、宇宙 D、大气层外 参考资料【 】 2、【单选题】轻于空气的航空器靠 升空。 A、与空气相对…

六盘水住房和城乡建设部网站wordpress关于

MySQL 一、练习要求二、练习过程 一、练习要求 创建表并插入数据: 字段名数据类型主键外键非空唯一自增idINT是否是是否nameVARCHAR(50)否否是否否glassVARCHAR(50)否否是否否 sch 表内容 id name glass 1 xiaommg glass 1 2 xiaojun glass 21、创建一个可以统计…

长春站是火车站还是高铁站建设医院网站的重点与难点在于

文章目录 1. 新建工程2. 打开工程3. 加载点云1. 新建工程 打开StonexSiScan点云后处理软件,点击【新建】按钮。 选择工程存放路径,输入工程名称。 2. 打开工程 点击【打开】按钮。

黄埔网站建设(信科网络)wordpress访问源端口号

1.编译lcx源码: GitHub - UndefinedIdentifier/LCX: 自修改免杀lcx端口转发工具 2.在win7上安装vs2010并编译生成lcx.exe 3.在要被控制主机上运行: lcx -slave 192.168.31.248 51 192.168.31.211 3389 192.168.31.248为远程主控制主机,51为远程主机端口 192.168.31.211为被…

广西南宁市住房和城乡建设局网站企业中征码查询入口

随着人们的生活水平的提升,越来越多小伙伴来开始追求更高的生活水平,一些智能化的小家电就被发明出来,而且内衣洗衣机是其中一个。我们对内衣裤的清洗频次会高于普通衣服,大多数人会选择手洗内衣裤,都在手洗过程不仅会…

做海报哪个网站好高清装饰画图片素材网

前五年—中国十大科技进展新闻(2012-2017) 2017年中国十大科技进展新闻1. 我国科学家利用化学物质合成完整活性染色体2. 国产水下滑翔机下潜6329米刷新世界纪录3. 世界首台超越早期经典计算机的光量子计算机诞生4. 国产大型客机C919首飞5. 我国首次海域天…

郑州营销型网站推广怎样建设一个网站赚钱

摘要:在目前的六氟化硫气体精密计量中普遍采用重量法和定容法两种技术,本文分析了重量法中存在的问题以及定容法的优势,同时也指出定容法在实际应用中还存在自动化水平较低的问题。为了提高定容法精密计量过程中的自动化水平,本文…

网站建设报告实训步骤建设局是什么单位

力扣面试150题 | 买卖股票的最佳时期 题目描述解题思路代码实现 题目描述 121.买卖股票的最佳时期 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一…