React进阶之前端业务Hooks库(二)

news/2025/2/22 10:15:38/

前端业务Hooks库

  • Action
    • deploy.yml
    • test.yml
  • 基于 state 的 hooks 方法
    • useBoolean
      • packages/hooks/src/useBoolean/index.ts
    • usePrevious
    • useDeleteRole
    • 防抖和节流
      • useDebounce
      • useThrottle
    • localStorage和sessionStorager区别
      • packages/hooks/src/useLocalStorageState
      • packages/hooks/src/useSessionStorageState
      • packages/hooks/src/createUseStorageState
  • 模块

  1. 完整的CI/CD的过程如何去实现
  2. 基于state开发的时候,和状态相关的hooks如何去做

Action

基于git action做的,其实是devops(开发运维)中的一个环节,主要是Ops环节,开发完成到发布的过程要怎么做
现在的开发部署不需要从0到1部署一个空的真正的集群,或者空的服务器,直接使用现成的服务器

今天的项目借助于GitHub(也可以用gitlab,Jenkins,docker compose)去做的,注重的是通过什么方式去进行构建/部署/发布流程

xx.yml -> 命令行的缩进表达序列化的展示,类似json,只是一种文档后缀的格式,可视化表达的功能

  • .github
    • workflows 针对于github中创建这样的目录,目录中对应的文件格式都是 -> .yml 进行git action部署的一个格式
      • deploy.yml
      • test.yml

结合在发布流程中,当我们触发某个钩子函数,一般称之为hook,结合发布的动作
针对git的workflow,git的阶段,commit,push,pull,PR,不同的阶段要触发不同的节点,这个节点就是我们对应的钩子
针对触发的节点上,就能够进行自定义功能,自定义事件

deploy.yml

对于我们而言要自动化发布,要怎么做?
在hooks开发完后要进行打包,打包后要进行发布

  1. 安装

pnpm run init

安装完成后

  1. 需要将docs文件,这里是dumi做的文件发布
    还需要将打包产物publish到npm上
    push 到 master上
  • on
    • master

vscode安装 github actions插件
在这里插入图片描述
这个能力:
在这里插入图片描述
基于github workflow的能力,跳转到指定的功能上

则可以监测记录的分支
jobs:类似jest的子工作
runs-on:基于github免费的服务器
permissions:开发时候要用到

gh-pages:部署的站点的分支
在这里插入图片描述
在这里插入图片描述
则可以获得官方提供的免费域名,

name: Build and Deploy
# 监听动作
on:  #github aciton的onpush: #push一个commit或tag时候branches: #能够检测到master分支- master
jobs: #类似jest一系列的子工作build-and-deploy: #构建和部署 runs-on: ubuntu-latest #基于github上提供的免费的服务器,这里使用的是最新的ubuntu机器permissions: #开发时候需要用到contents: write #提供一个写文件的,因为要把内容写到分支中去steps: # 针对build-and-deploy的步骤- name: Checkout #要去使用git actions功能模块uses: actions/checkout@v2.3.1- name: Lock npm version #安装指定的node版本uses: actions/setup-node@v3with:node-version: 16.18.0- name: Install and Build #安装和构建,与本地工作一致run: |npm i -g pnpmpnpm run initpnpm run build:doc      #也就是dumi build,打包后的dist文件就是最终部署到服务器上的env: #node的选项:最大老生代内存的大小为4M,保证执行安装时候不会超出内存堆栈 NODE_OPTIONS: '--max_old_space_size=4096'- name: Deploy #文档部署uses: JamesIves/github-pages-deploy-action@4.1.3 #github-pages-deploy-action插件,github提交的一系列的deploy功能with:BRANCH: gh-pages #部署分支FOLDER: dist ACCESS_TOKEN: ${{ secrets.ACCESS_TOKEN }} #github账号提供的密钥

github-pages-deploy-action

设置密钥tokens:
在这里插入图片描述
这里添加创建密钥

deploy.yml文件执行的内容:
在这里插入图片描述
在这里插入图片描述

test.yml

test CI:自动化测试
借助于github的git action做到的

name: Test CI
on:push:branches: - master 
jobs:build-and-deploy:runs-on: ubuntu-lateststeps:- name: Checkout  ️uses: actions/checkout@v2.3.1- name: lock npm versionuses: actions/setup-node@v3with:node-version: 16.18.0- name: Install and Buildrun: |npm i -g pnpmpnpm run initenv:NODE_OPTIONS: '--max_old_space_size=4096'- name: testrun: | #最后执行 run test pnpm run test

test CI:自动化测试
pnpm run test 执行成功后,会有一个对应的回调,如果失败的话,意味着单测失败,一般会发布到线上的环境。先通过master环境打包,打包之后,单测执行失败的话,就不会将docs功能部署到线上。

可以借助于AI功能进行发布npm包,部署环境文件的导出,
豆包,kimi: 使用git action 进行发布的,请提供一个git action文件
编码一个 yaml 文件,用于git actions,用于自动化的jest测试,并且能够使用上一次发布的缓存
在这里插入图片描述
作业1:在自己的项目上按照这套流程,自己发布一下

基于 state 的 hooks 方法

自定义hooks,一般是借助 useState,useMemo,useCallback,useEffect 这几个实现的

创建基于state的hooks要使用哪些呢?
这里说的是 通用型的hooks,但在实际开发会有定制化的hooks
比如,要使用:

  • usePermissions 获取用户的身份状态,获取用户权限
  • useRole 当前用户登录的角色
interface IPermissionsProps{/** type*   page 页面权限*   slot 页面模块,按钮*/  type: "page" | "slot";/* 对应访问的权限功能 */authCode?: string;
}const useRolePermission=async () => {return await useRequest(async ()=>{// session,通过session读取用户登录身份const { authCodes=[] } = await api.getPermission(); //返回权限码return authCodes})
}const usePersmissions = (permissionProps:IPermissionsProps)=>{const { type='page' } = permissionProps;let hasPermission = false;const authCodes=useRolePermission;return authCodes?autoCodes?.includes(authCode):true;
}

useBoolean

判断用户是或非

packages/hooks/src/useBoolean/index.ts

引用useToggle

import { useMemo } from 

http://www.ppmy.cn/news/1574129.html

相关文章

【大语言模型_2】mindie部署deepseek模型

一、模型下载 https://modelscope.cn/home 下载地址:https://modelscope.cn/home 二、服务器驱动/固件安装 驱动/固件下载地址: https://www.hiascend.com/hardware/firmware-drivers/community?product1&model23&cannAll&driver1.0.21…

阿里云 ACS:高效、弹性、低成本的容器计算解决方案

阿里云的 容器计算服务(Alibaba Cloud Container Service, ACS) 是一种 Serverless 容器计算 解决方案,提供高度弹性、低成本、易管理的 Kubernetes(K8s)容器运行环境。用户无需关注底层服务器资源,而是直接…

STM32 HAL库UART串口数据接收实验

1. 实验目标 掌握STM32 HAL库的UART配置方法 实现通过UART接收数据并处理 使用中断方式接收数据 用串口调试工具发送数据1或0,输入为1时板载LED亮,输入为0板载LED熄灭。 2. 硬件准备 STM32开发板(STM32F103C8T6) USB转TTL模块…

【目标检测】【YOLOv4】YOLOv4:目标检测的最佳速度与精度

YOLOv4:目标检测的最佳速度与精度 0.论文摘要 有许多特征被认为可以提高卷积神经网络(CNN)的准确性。需要在大规模数据集上对这些特征的组合进行实际测试,并对结果进行理论上的验证。某些特征仅适用于特定模型和特定问题&#…

基于YOLO11深度学习的糖尿病视网膜病变检测与诊断系统【python源码+Pyqt5界面+数据集+训练代码】

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…

day56 第十一章:图论part06

108.冗余连接 注意init初始化 改进&#xff1a; 其实只有一条边冗余&#xff0c;改为&#xff0c;如果两条边在同一个集合里&#xff0c;就输出&#xff0c;不然加入。 #include <iostream> #include <vector> using namespace std;int n 1005; vector<int>…

共筑金融数字化新生态!YashanDB与恒生电子完成兼容互认证

近日&#xff0c;深圳计算科学研究院的崖山数据库系统YashanDB与恒生电子股份有限公司HUNDSUN资产估值与会计核算软件V6.0成功完成了兼容性互认证。结果显示&#xff0c;双方产品完全兼容&#xff0c;稳定运行&#xff0c;可共同为银行、证券、基金、保险、信托等金融机构提供稳…

stm32高级TIM的常用功能

介绍 STM32 高级定时器的刹车死区、互补输出、输入捕获 的基本资料。 1. 刹车死区&#xff08;Brake Dead Time&#xff09; 高级定时器&#xff08;如 TIM1、TIM8&#xff09;支持 刹车死区&#xff08;Brake Dead Time&#xff09; 功能&#xff0c;通常用于电机控制和其他…