首页 > 其他分享 >GoWVP 全栈开发日记[5]:使用 react-hook-form 完成表单

GoWVP 全栈开发日记[5]:使用 react-hook-form 完成表单

时间:2025-01-20 22:30:52浏览次数:3  
标签:GoWVP form react 文档 env shadcn vite

GoWVP 全栈开发日记[5]:使用 react-hook-form 完成表单

  • 服务端源代码 https://github.com/gowvp/gb28181

  • 前端源代码 https://github.com/gowvp/gb28181_web

介绍

GoWVP (Golang Web Video Platfrom) 是一个 Go 语言实现的,基于 GB28181-2022 标准实现的网络视频平台,负责实现核心信令与设备管理后台部分,支持海康、大华、宇视等品牌的IPC、NVR、DVR接入。支持国标级联,支持rtsp/rtmp等视频流转发到国标平台,支持rtsp/rtmp等推流转发到国标平台。

技术栈

Golang v1.23, Goweb v1.x, Gin v1.10, Gorm v1.25 …

React 19, Vite 6.x, Typescript, React-Router v7, React-Query v5, shadcn/ui …

React-Hook-Form

在项目中迎来第一个表单,按照 shadcn/ui 执行命令 npx shadcn@latest add form ,将会安装 react-hook-form,以下简称 RHF

在项目中首次使用 react-hook-form 时,终端或浏览器中会提示这样的错误。

image-20250119230332551

看错误提示,似乎是导入了错误的属性?

在业务层并没有看到相关的参数, 快捷键 shift+command+f 全局搜索关键字 FieldValues,此时可以看到咱们刚刚执行命令添加的 form 文件有点问题,并且旁边给了很好的提示。

image-20250119231231564

使用快键键 command+. 快速修复,在前面补充 type 关键字。

image-20250119231338602

关闭 Sheet

在项目中,我使用 sheet 作为 form 的摆台,所以是否关闭应该跟随表单的提交结果。

方法一 此方法无法由函数控制开关,只能提供默认关闭按钮,推荐方法二。

<SheetClose asChild>
  <Button>关闭</Button>
</SheetClose>

方法二 通过 useState 管理状态 (推荐)

const [open, setOpen] = useState(false);
// ...
<Sheet open={open} onOpenChange={setOpen}>
</Sheet>

给 Button 加点动画

image-20250120214540501

自定义动画 Button 组件设计:

  • 在接口处理请求时,叠加一个加载动画,此加载动画不能影响到原组件的宽度,所以使用 zIndex css 属性叠加在上层。
  • 加载动画背景是白色,可以加一点透明度或者高斯模糊,这里我选择了透明度,还能看清原来按钮上淡淡的文字。

默认的 shadcn/uibutton 按钮是没有加载动画的,使用 lucide-reactLoader2 图标加一点点 css 动画实现加载效果。

编辑 components/ui/button.tsx:55 ,增加 loading 参数,将下方的代码复制进去,具体修改如下图所示。

{props.children}
{loading && (
      <div className="absolute inset-0 flex items-center justify-center bg-white bg-opacity-80 z-10">
          <Loader2 className="animate-spin" />
      </div>
)}

image-20250120214522615

React-Query useMutation

image-20250120215607455

useMutation 可以用来发起 POST、PUT、DELETE 等会对服务器数据进行修改的请求。提供了请求状态的管理,包括 isLoading(表示请求是否正在进行)、isError(表示请求是否出错)、isSuccess(表示请求是否成功)等状态变量,方便你在 UI 上根据请求状态展示不同的反馈,比如显示加载中的进度条、错误信息或成功提示等。

请求参数

  • mutationFn: 执行的异步函数
  • onSuccess: 执行成功的处理函数
  • onError: 执行失败的处理函数

返回参数

  • mutate 执行的异步函数
  • isPending 如果函数正在执行,则为 true,可以用于显示 loading 状态

当做出修改后,应当将当前页的缓存数据失效,使用 invalidateQueries,默认情况下匹配的查询都会立即标记为无效,并在后台重新获取。

  • 如果您不希望活跃查询重新获取,而只是将其标记为无效,则可以使用 refetchType: ‘none’ 选项。
  • 如果您还希望重新获取非活跃查询,请使用 refetchType: ‘all’ 选项
await queryClient.invalidateQueries(
  {
    queryKey: ['posts'],
    exact,
    refetchType: 'active',
  }
)

queryKey 见 useQuery 的解释。

exact 为 true 时表示精确查询,比如完全匹配 queryKey

refetchType 默认为 active ,一般此参数可免填。

vite env 配置

在项目中可以使用 import.meta.env. 获取文件中定义的环境变量。

Typescript 项目可以在项目根目录下定义 vite-env.d.ts 获取语法提示。

可以定义 .env.development.env.production 两个文件,分别用于开发和打包使用,环境变量相同的内容可以抽取到 .env 文件中用于全局。

/// <reference types="vite/client" />

// vite 环境变量 ts 语法提示
interface ImportMetaEnv {
  // 页面访问前缀
  readonly VITE_BASENAME: string;
  // 更多环境变量...
}

interface ImportMeta {
  readonly env: ImportMetaEnv;
}

vite.config.ts 配置中是无法直接使用 import.meta.env,使用下方这行代码。

const env = loadEnv(mode, process.cwd(), "");

image-20250120222115905

总结

不知道读者有没有注意到,每篇文章末尾的参考,都是 官方文档

其实一手的资料都在其项目对应的官方文档中。

众里寻他千百度,蓦然回首,那人却在,灯火阑珊处。

参考

shadcn/ui sheet 官方文档

shadcn/ui form 官方文档

react-hook-form 官方文档

zod 官方文档

react query filters 官方文档

react query useMutation 官方文档

vite 环境变量配置 官方文档

vite 在 vite.config.ts 配置中使用环境变量 官方文档

标签:GoWVP,form,react,文档,env,shadcn,vite
From: https://blog.csdn.net/weixin_42324398/article/details/145270676

相关文章

  • 深度解析从 RNN 到 Transformer:构建 NLP 应用的架构演进之路
    深度解析从RNN到Transformer:构建NLP应用的架构演进之路......
  • AI - ReAct 技术与 Function Call 技术介绍
    ReAct技术与FunctionCall技术介绍1.ReAct技术ReAct是一种用于增强语言模型推理能力的技术,通过在模型的推理过程中引入“思考”(thought)步骤,帮助模型更好地理解和规划下一步行动。核心思想:ReAct在传统的“行动-观察”(action-observation)循环中加入了“思考”步骤,......
  • 初见ESP32并搭建Platformio环境
    碎碎念(寒假参加了硬禾学堂的活动,拿到了基于esp32的CrowPanel开发板。TFTLCD触摸屏能玩出不少花样,lvgl,ai识别,如果可以的话想试试把屏接到f407学习一下FSMC和FATFS。第一步先从开发平台搭建开始。总体流程为在VSCode上下载platformio的插件在插件上打开新建项目并编译下载到......
  • 【模型】Informer模型详解
    Informer是一种针对长时间序列预测任务设计的深度学习模型,特别适用于解决序列数据的高效建模与预测问题。Informer提出了许多创新的机制,尤其是在计算效率方面,能够显著提高长时间序列预测的准确性和速度。以下是对该模型的详细介绍。1.模型架构Informer的核心思想是通......
  • [锂电池寿命预测]基于Transformer-BiLSTM的锂电池剩余寿命预测
    [锂电池寿命预测]基于Transformer-BiLSTM的锂电池剩余寿命预测%%数据归一化[P_train,ps_input]=mapminmax(P_train,0,1);P_test=mapminmax('apply',P_test,ps_input);[t_train,ps_output]=mapminmax(T_train,0,1);t_test=mapminmax('apply',T_......
  • winform使用依赖注入框架Autofac的一些记录
    由于winform的framework框架无法实现core那样的依赖注入,必须借助于依赖注入框架来实现。此次使用Autofac,由于DAL被BLL引用,而BLL又被主程序引用,所以在framework里要实现依赖注入,主程序必须引用DAL和BLL,才可以在主程序里面对DAL和BLL进行注册,这又违背了解耦的原则,所以只能在BLL和主......
  • 日期时间格式化:DateTimeFormatter (全面总结和详细拆解)
    前言:小编吃了点药药,终于流感要好啦(嘻嘻)我们继续日更吧!!!我们一直都是以这样的形式,让新手小白轻松理解复杂晦涩的概念,把Java代码拆解的清清楚楚,每一步都知道他是怎么来的,为什么用这串代码关键字,对比同类型的代码,让大家真正看完以后融会贯通,举一反三,实践应用!!!!①官方定义......
  • Transformer 面试常考题快问快答
    本人是某双一流大学硕士生,也最近刚好准备参加2024年秋招,在找大模型算法岗实习中,遇到了很多有意思的面试,所以将这些面试题记录下来,并分享给那些和我一样在为一份满意的offer努力着的小伙伴们!!!Transformer面试题快问快答1.Transformer为何使用多头注意力机制?原因:多头注......
  • Conditional render 1 of 3 components on button click (react)
    题意:在按钮点击时有条件地渲染三个组件中的一个(React)问题背景:I'mnewtoreactandbeenstrugglingtofigureouthowtorenderthecomponentsinsidethecontainerdependingonwhichbuttonhasbeenclicked.我刚接触React,一直在努力弄明白如何根据点击了哪个按......
  • 强推未发表!3D图!Transformer-LSTM+NSGAII工艺参数优化、工程设计优化!
    目录效果一览基本介绍程序设计参考资料效果一览基本介绍1.Transformer-LSTM+NSGAII多目标优化算法,工艺参数优化、工程设计优化!(Matlab完整源码和数据)Transformer-LSTM模型的架构:输入层:多个变量作为输入,形成一个多维输入张量。Transformer编码器:该编码器由多个T......