3D个人简历网站 7.联系我

news2025/5/24 6:00:48

3D个人简历网站 7.联系我

修改Contact.jsx

// 从 react 库导入 useRef 和 useState hooks
import { useRef, useState } from "react";

/**
 * Contact 组件,用于展示联系表单,处理用户表单输入和提交。
 * @returns {JSX.Element} 包含联系表单的 JSX 元素
 */
const Contact = () => {
  // 创建一个 ref 对象,用于引用表单元素,方便后续操作
  const formRef = useRef();
  // 使用 useState hook 管理表单数据,初始值为包含姓名、邮箱和消息的空对象
  const [form, setForm] = useState({ name: "", email: "", message: "" });
  // 使用 useState hook 管理表单提交时的加载状态,初始值为未加载
  const [loading, setLoading] = useState(false);

  /**
   * 处理表单输入框内容变化的函数,更新表单数据。
   * @param {Object} e - 事件对象
   * @param {Object} e.target - 触发事件的目标输入框元素
   * @param {string} e.target.name - 输入框的名称
   * @param {string} e.target.value - 输入框的当前值
   */
  const handleChange = ({ target: { name, value } }) => {
    // 扩展原有表单数据,更新当前输入框对应的字段值
    setForm({ ...form, [name]: value });
  };

  /**
   * 处理表单提交的函数,模拟提交操作。
   * @param {Object} e - 事件对象
   */
  const handleSubmit = (e) => {
    // 阻止表单默认提交行为,避免页面刷新
    e.preventDefault();
    // 设置加载状态为 true,显示加载提示
    setLoading(true);

    // 模拟提交操作,这里可以添加实际的提交逻辑
    setTimeout(() => {
      // 打印表单数据到控制台
      console.log("表单已提交:", form);
      // 设置加载状态为 false,隐藏加载提示
      setLoading(false);
      // 重置表单数据
      setForm({ name: "", email: "", message: "" });
    }, 1000);
  };

  return (
    // 外层容器,使用相对定位,根据屏幕尺寸调整布局
    <section className='relative flex flex-col max-container'>
      {/* 表单容器,使用弹性布局 */}
      <div className='flex flex-col'>
        {/* 页面标题 */}
        <h1 className='head-text'>联系我</h1>

        {/* 表单元素,使用 ref 引用,绑定提交事件处理函数 */}
        <form
          ref={formRef}
          onSubmit={handleSubmit}
          className='w-full flex flex-col gap-7 mt-14'
        >
          {/* 姓名输入框标签 */}
          <label className='text-black-500 font-semibold'>
            姓名
            {/* 姓名输入框,设置类型、名称、样式、占位符等属性,绑定值和输入变化事件 */}
            <input
              type='text'
              name='name'
              className='input'
              placeholder='张三'
              required
              value={form.name}
              onChange={handleChange}
            />
          </label>
          {/* 邮箱输入框标签 */}
          <label className='text-black-500 font-semibold'>
            邮箱
            {/* 邮箱输入框,设置类型、名称、样式、占位符等属性,绑定值和输入变化事件 */}
            <input
              type='email'
              name='email'
              className='input'
              placeholder='zhangsan@example.com'
              required
              value={form.email}
              onChange={handleChange}
            />
          </label>
          {/* 消息输入框标签 */}
          <label className='text-black-500 font-semibold'>
            您的留言
            {/* 消息输入框,设置名称、行数、样式、占位符等属性,绑定值和输入变化事件 */}
            <textarea
              name='message'
              rows='4'
              className='textarea'
              placeholder='请在此写下您的想法...'
              value={form.message}
              onChange={handleChange}
            />
          </label>

          {/* 提交按钮,根据加载状态禁用按钮并显示不同文本 */}
          <button
            type='submit'
            disabled={loading}
            className='btn'
          >
            {loading ? "发送中..." : "提交"}
          </button>
        </form>
      </div>
    </section>
  );
};

// 导出 Contact 组件,供其他文件使用
export default Contact;

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

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

相关文章

软考中级软件设计师——计算机系统篇

一、数据的表示和运算 1、进制转换 1. 常见进制类型 二进制&#xff08;B&#xff09;&#xff1a;基数为2&#xff08;0,1&#xff09;&#xff0c;计算机底层使用。 八进制&#xff08;O&#xff09;&#xff1a;基数为8&#xff08;0-7&#xff09;&#xff0c;3位二进制…

甘特图(项目计划图)

甘特图是甘特在第一次世界大战时为了提供工人效率所创。 由时间&#xff08;顶部横坐标&#xff09;和工作事项&#xff08;左边纵坐标组成&#xff09; 假设&#xff0c;我要做大数据迁移&#xff08;一般半年&#xff0c;几PB的数据和上万个任务&#xff09; 类似于这种

windows服务器部署jenkins工具(一)

jenkins作为一款常用的构建发布工具&#xff0c;极大的简化了项目部署发布流程。jenkins通常是部署在linux服务上&#xff0c;今天给大家分享的是windows服务器上如何搭建jenkins发布工具。 1.首先第一步还是看windows安装docker 这篇文章哈&#xff0c;当然也可以不采用docke…

基于51单片机和8X8点阵屏、独立按键的飞行躲闪类小游戏

目录 系列文章目录前言一、效果展示二、原理分析三、各模块代码1、8X8点阵屏2、独立按键3、定时器04、定时器1 四、主函数总结 系列文章目录 前言 用的是普中A2开发板。 【单片机】STC89C52RC 【频率】12T11.0592MHz 【外设】8X8点阵屏、独立按键 效果查看/操作演示&#xff…

告别“盘丝洞”车间:4-20mA无线传输如何重构工厂神经网?

4-20ma无线传输是利用无线模块将传统的温度、压力、液位等4-20mA电流信号转换为无线信号进行传输。这一技术突破了有线传输的限制&#xff0c;使得信号可以在更广泛的范围内进行灵活、快速的传递&#xff0c;无线传输距离可达到50KM。达泰4-20ma无线传输模块在实现工业现场应用…

VMware虚拟机突然无法ssh连接

遇到的情况&#xff1a; 功能全部正常的情况下&#xff0c;没有修改任何配置&#xff0c;重启电脑之后无法ssh连接 其实不太可能的可能原因&#xff1a; 1、虚拟机内部sshd服务未运行 systemctl status sshd systemctl start sshd 2、检查SSH端口监听 netstat -an | grep :…

班迪录屏--解决视频剪辑时声音和画面不同步的问题

原文网址&#xff1a;班迪录屏--解决视频剪辑时声音和画面不同步的问题_IT利刃出鞘的博客-CSDN博客 简介 本文介绍如何用班迪录屏解决视频剪辑时声音和画面不同步的问题。 问题描述 我用班迪录屏录了视频&#xff0c;用剪映进行剪辑&#xff0c;结果发现在剪辑时声音和画面…

Git上传项目到GitHub

Git上传项目到GitHub 下载Git客户端配置Git设置GitHub上传本地项目到Github 下载Git客户端 网址&#xff1a;Git Windows客户端。选择Standalone Installer(单独安装程序)&#xff0c;并点击64bit Git for Windows Setup(64位Git for Windows安装程序)进行下载。然后一路默认选…

【工具】Quicker/VBA|PPT 在指定位置添加有颜色的参考线

文章目录 效果展示使用方式技术原理更多原理ActivePresentation.Guides 概述主要属性和方法使用示例添加水平参考线添加垂直参考线删除所有参考线获取参考线数量 注意事项 致谢 效果展示 先展示效果&#xff1a; Quicker 动作&#xff1a;VBA 添加参考线 - Quicker 动作 使用…

第34节:迁移学习中的特征提取方法

迁移学习中的特征提取方法:原理、技术与应用 1. 迁移学习与特征提取概述 迁移学习(Transfer Learning)作为机器学习领域的重要范式 通过将源领域(source domain)学到的知识迁移到目标领域(target domain),有效解决了传统机器学习需要大量标注数据的瓶颈问题。 在迁…

(万字长文)Django数据库操作——ORM:数据交互显示前端网页

&#x1f31f; 如果这篇文章触动了你的心弦&#xff0c;请不要吝啬你的支持&#xff01; 亲爱的读者&#xff0c; 感谢你花时间阅读这篇分享。希望这里的每一个字都能为你带来启发或是让你会心一笑。如果你觉得这篇文章有价值&#xff0c;或者它解决了你一直以来的一个疑问&a…

实验-使用递归计算阶乘-RISC-V(计算机组成原理)

目录 一、实验内容 二、实验步骤 三、实验效果 四、实验环境 五、实验小结和思考 一、实验内容 一个典型的计算阶乘的递归过程如下图所示&#xff1a; 在这个任务中&#xff0c;一份汇编代码的框架“task4-阶乘”你需要使用RISC-V或MIPS汇编程序以递归的形式解决这个问题。…

ISO 26262-5 评估硬件架构度量值

两种硬件架构的度量&#xff0c; 用于评估相关项架构应对随机硬件失效的有效性。 应评估&#xff08;评估仅限于ASIL (B)、 C 和 D 的安全目标&#xff09; 1 应将按照附录 C 单点故障度量和潜伏故障度量的诊断覆盖率来评估 2 应结合残余故障和相关的潜伏故障来预估安全机制…

【Qt开发】显示类控件——QLCDNumber

目录 1&#xff0c;QLCDNumber的说明 2&#xff0c;QLCDNumber的运用 1&#xff0c;QLCDNumber的说明 QLCDNumer 是一个专门用来显示数字的控件。它类似于 "老式计算器" 的效果。它的核心属性如下&#xff1a; 2&#xff0c;QLCDNumber的运用 定时器 运用QLCDNumb…

音频AAC编码与RV1126的AENC模块的讲解

一.音频编码的原理 AAC编码的基本概念 AAC&#xff08;Advanced Audio Coding&#xff09;是一种高级音频编码格式&#xff0c;旨在提供比MP3更高的音质和更低的比特率。AAC是MPEG-2和MPEG-4标准的一部分&#xff0c;广泛应用于音乐、视频流媒体和广播等领域 音频为什么要进…

vue页面目录菜单有些属性是根据缓存读取的。如果缓存更新了。希望这个菜单也跟着更新。

父组件中有两个子组件。如果在B组件数据更新之后。A组件也跟着一起改变呢&#xff1f;如图如果我右边基本信息里面勾选了高血压&#xff0c;左侧菜单里面也要立刻出现一个高血压随访菜单&#xff0c;如果我取消勾选了左侧菜单就去掉。 左侧菜单的显示和隐藏的数据实际上是放在…

在TIA 博途中下载程序时找不到对应的网卡怎么办?

1. 检查物理连接 确认网线已正确连接PLC和PC&#xff0c;接口指示灯正常。 尝试更换网线或交换机端口&#xff0c;排除硬件故障。 2. 确认网卡驱动已安装 设备管理器检查&#xff1a; 右键点击“此电脑” → “管理” → “设备管理器”。 展开“网络适配器”&#xff0c;确…

《量子计算实战》PDF下载

内容简介 在加密、科学建模、制造物流、金融建模和人工智能等领域&#xff0c;量子计算可以极大提升解决问题的效率。量子系统正变得越来越强大&#xff0c;逐渐可用于生产环境。本书介绍了量子计算的思路与应用&#xff0c;在简要说明与量子相关的科学原理之后&#xff0c;指…

Linux入门(部分基础相关知识+常用命令+权限)

目录 1.基础背景了解 2、基本操作系统、linux相关知识 1.操作系统是一款用来管理软硬件资源的软件。 2.对于一个文件来说&#xff0c;是由文件内容文件属性构成的。空文件&#xff08;内容为空&#xff09;也占磁盘空间。 3.linux下的目录结构 4.linux下的删除 5.环境 6…

海拔案例分享-实践活动报名测评小程序

大家好&#xff0c;今天湖南海拔科技想和大家分享一款实践活动报名测评小程序&#xff0c;客户是长沙一家专注青少年科创教育的机构&#xff0c;这家机构平时要组织各种科创比赛、培训课程&#xff0c;随着学员增多&#xff0c;管理上的问题日益凸显&#xff1a;每次组织活动&a…