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

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 引用,绑定提交事件处理函数 */}<formref={formRef}onSubmit={handleSubmit}className='w-full flex flex-col gap-7 mt-14'>{/* 姓名输入框标签 */}<label className='text-black-500 font-semibold'>姓名{/* 姓名输入框,设置类型、名称、样式、占位符等属性,绑定值和输入变化事件 */}<inputtype='text'name='name'className='input'placeholder='张三'requiredvalue={form.name}onChange={handleChange}/></label>{/* 邮箱输入框标签 */}<label className='text-black-500 font-semibold'>邮箱{/* 邮箱输入框,设置类型、名称、样式、占位符等属性,绑定值和输入变化事件 */}<inputtype='email'name='email'className='input'placeholder='zhangsan@example.com'requiredvalue={form.email}onChange={handleChange}/></label>{/* 消息输入框标签 */}<label className='text-black-500 font-semibold'>您的留言{/* 消息输入框,设置名称、行数、样式、占位符等属性,绑定值和输入变化事件 */}<textareaname='message'rows='4'className='textarea'placeholder='请在此写下您的想法...'value={form.message}onChange={handleChange}/></label>{/* 提交按钮,根据加载状态禁用按钮并显示不同文本 */}<buttontype='submit'disabled={loading}className='btn'>{loading ? "发送中..." : "提交"}</button></form></div></section>);
};// 导出 Contact 组件,供其他文件使用
export default Contact;

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

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

相关文章

AI大模型从0到1记录学习numpy pandas day25

第 3 章 Pandas 3.1 什么是Pandas Pandas 是一个开源的数据分析和数据处理库&#xff0c;它是基于 Python 编程语言的。 Pandas 提供了易于使用的数据结构和数据分析工具&#xff0c;特别适用于处理结构化数据&#xff0c;如表格型数据&#xff08;类似于Excel表格&#xff09;…

一些可以优化JavaScript性能的工具或库汇总

在 JavaScript 性能优化方面,有许多实用的工具和库可以帮助你分析、监控和提升代码性能。以下是一些常用的工具和库分类整理: 一、性能分析工具 这些工具用于诊断性能瓶颈,定位问题代码。 Chrome DevTools Performance 面板:分析运行时性能,记录函数执行时间、内存使用、…

Linux | tmux | 无法复制粘贴

问题&#xff1a;在Linux中使用tmux时&#xff0c;总是没法使用复制粘贴功能&#xff1b; 解决: 如果希望直接用鼠标选择并复制&#xff08;类似普通终端&#xff09;&#xff0c;可以&#xff1a; 在 ~/.tmux.conf 中添加&#xff1a;sh set -g mouse on;重新加载 tmux 配置…

行贿罪案件(公安侦查阶段)询问笔录发问提纲

一、基本情况核实 与行贿对象&#xff08;受贿人&#xff09;的关系&#xff1f;何时通过何种方式认识&#xff1f;日常交往频率及主要内容&#xff1f; 是否具备国家工作人员身份或其他特定主体资格&#xff1f;是否属于被追诉单位的直接责任人员&#xff1f; 二、行贿动机与…

活到老学到老-Spring参数校验注解Validated /Valid

通过 Validated 和 Valid可以对请求的进行参数校验。 1.核心对比&#xff1a; 特性Valid (JSR-303)Validated (Spring)来源Java标准规范Spring框架扩展分组校验不支持支持&#xff08;通过groups属性&#xff09;嵌套路径自动处理级联校验需配合Valid生效应用范围方法参数、属…

【笔记】JetBrains 数据迁移与符号链接操作

数据迁移与符号链接操作 一、备份原始数据 使用 robocopy 命令备份 C 盘中的源文件夹&#xff0c;确保原始数据完整备份。 robocopy "C:\Users\love\AppData\Local\JetBrains" "E:\Downloads\Other\JetBrains" /E确保备份路径足够存储空间。 二、复制文…

使用 Terraform 创建 Azure Databricks 工作区

使用 Terraform 创建 Azure Databricks Terraform 是一种基础设施即代码(IaC)工具,允许用户通过声明式配置文件来管理和部署云资源。Azure Databricks 是一个基于 Apache Spark 的分析平台,专为数据工程和数据科学设计。通过 Terraform,可以自动化 Azure Databricks 的创…

【zookeeper】--部署3.6.3

文章目录 下载解压创建data和logs配置文件1)创建目录并且编辑 zoo.cfg2)接下来将 node01 的 ZooKeeper 所有文件拷贝至 node02 和 node03。推荐从 node02 和 node03 拷贝4&#xff09;最后 vim /etc/profile 配置环境变量&#xff0c;环境搭建结束。配完环境变量后 source /etc…

RxJS 核心操作符详细用法示例

1. Observable 详细用法 Observable 是 RxJS 的核心概念&#xff0c;代表一个可观察的数据流。 创建和订阅 Observable import { Observable } from "rxjs";// 1. 创建Observable const myObservable new Observable(subscriber > {// 发出三个值subscriber.n…

QGrphicsScen画布网格和QGrphicsItem对齐到网格

#include <QGraphicsScene> #include <QPainter> #include <QWheelEvent> #include <QGraphicsView> class MyGraphicsView : public QGraphicsView { public:MyGraphicsView(QGraphicsScene* scene) : QGraphicsView(scene){}protected:// 重写滚轮事…

深入解析自然语言处理中的语言转换方法

在数字化浪潮席卷全球的今天&#xff0c;自然语言处理&#xff08;Natural Language Processing&#xff0c;NLP&#xff09;作为人工智能领域的核心技术之一&#xff0c;正深刻地改变着我们与机器交互的方式。其中&#xff0c;语言转换方法更是 NLP 的关键组成部分&#xff0c…

VRRP虚拟路由器协议的基本概述

目录 vrrp是什么&#xff1f; VRRP的一些概念与专有名词 VRRP的Master选举规则&#xff1a; 尾声 vrrp是什么&#xff1f; vrrp全名virtual router redundance protocol&#xff0c;虚拟路由器冗余协议 VRRP的一些概念与专有名词 1&#xff09;VRRP设备&#xff1a;运行VRRP…

数据结构 -- 交换排序(冒泡排序和快速排序)

冒泡排序 基于“交换”的排序&#xff1a;根据序列中两个元素关键字的比较结果来对换这两个记录在序列中的位置 //交换 void swap(int &a,int &b){int temp a;a b;b temp; }//冒泡排序 void BubbleSort(int A[],int n){for(int i0;i<n-1;i){bool flag false; …

多模态AI终极形态?GPT-5与Stable Diffusion 3的融合实验报告

多模态AI终极形态&#xff1f;GPT-5与Stable Diffusion 3的融合实验报告 系统化学习人工智能网站&#xff08;收藏&#xff09;&#xff1a;https://www.captainbed.cn/flu 文章目录 多模态AI终极形态&#xff1f;GPT-5与Stable Diffusion 3的融合实验报告摘要引言技术架构对…

ajax中get和post的区别,datatype返回的数据类型有哪些?

GET 请求 和 POST 请求 是 HTTP 协议中常用的两种请求方法&#xff0c;它们主要的区别在于&#xff1a; GET 请求&#xff1a; 数据传输方式&#xff1a;数据通过 URL 传递&#xff0c;通常是附加在 URL 后面的查询字符串中&#xff0c;例如 https://example.com/page?nameJoh…

101 alpha_59

(0 - (1 * (rank((sum(returns, 10) / sum(sum(returns, 2), 3))) * rank((returns * cap))))) 0 - (1 * A * B) A rank((sum(returns, 10) / sum(sum(returns, 2), 3)))B rank((returns * cap)) sum(returns, 10)&#xff1a;计算过去 10 期收益率的总和sum(returns, 2)&…

vscode里几种程序调试配置

标题调试python嵌入的c代码,例如 import torch from torch.utils.cpp_extension import loadtest_load load(nametest_load, sources[test.cpp],extra_cflags[-O0, -g],#extra_cflags[-O1],verboseTrue, ) a torch.tensor([1, 2, 3]) b torch.tensor([4, 5, 6]) result te…

深入解析MySQL中的HAVING关键字:从入门到实战

引言 在SQL查询中&#xff0c;数据过滤是核心操作之一。我们常用WHERE子句进行行级过滤&#xff0c;但当需要对分组后的结果进行条件筛选时&#xff0c;HAVING关键字便成为不可或缺的工具。本文将深入探讨HAVING的作用、使用场景及其与WHERE的区别&#xff0c;并通过实际案例帮…

根据YOLO数据集标签计算检测框内目标面积占比(YOLO7-10都适用)

程序&#xff1a; 路径改成自己的&#xff0c;阈值可以修改也可以默认 #zhouzhichao #25年5月17日 #计算时频图中信号面积占检测框面积的比值import os import numpy as np import pandas as pd from PIL import Image# Define the path to the directory containing the lab…

AI神经网络降噪 vs 传统单/双麦克风降噪的核心优势对比

1. 降噪原理的本质差异 对比维度传统单/双麦克风降噪AI神经网络降噪技术基础基于固定规则的信号处理&#xff08;如谱减法、维纳滤波&#xff09;基于深度学习的动态建模&#xff08;DNN/CNN/Transformer&#xff09;噪声样本依赖预设有限噪声类型训练数据覆盖数十万种真实环境…