当前位置: 首页 > news >正文

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;

相关文章:

  • LVGL(lv_textarea文本框控件)
  • feign调用指定服务ip端口
  • 【Linux部署Java服务的那些事】
  • C++之STL--string
  • TCP实现双向通信练习题
  • 人工智能在智能教育中的创新应用与未来展望
  • 【C++模板与泛型编程】模板特化
  • 论文Review 地面分割 GroundGrid
  • KEPServerEX MQTT使用
  • 【Linux】基础开发工具(下)
  • Sa-Token登录权限认证
  • Flume之选择器:复制和多路复用(比喻化理解
  • 频湖脉决全文
  • 科技成果鉴定测试怎么进行?进行鉴定测试有什么好处
  • Java对象内存分配优化教学
  • Python图形化秒表:使用Turtle打造精确计时工具
  • redis 缓存穿透,缓存雪崩,缓存击穿
  • 数字FPGA开发方向,该如何做好职业规划?
  • POI模板生成EXCEL 64000 style in a .xlsx Workbook
  • Flask项目打开总是上一个项目的网页
  • wordpress publisher/广州网站seo
  • 企业做app好还是网站好/seo研究协会
  • 网站建设流程步骤/广告公司是做什么的
  • 物联网和互联网的区别/seo研究中心vip教程
  • 视频网站开发要多少钱/seo外链发布软件
  • 建设网站的好处有哪些/朋友圈广告推广平台