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

React开发08_项目练习

React开发08_项目练习

文章目录

  • React开发08_项目练习
  • 1-参考地址
  • 2-动手实操
    • 1-快速常见React项目
    • 2-页面编写
      • 1-编写页面
      • 2-添加数据
      • 3-使用form表单
      • 4-完善form表单


1-参考地址

  • React中文官方教程

2-动手实操

编写一个最简单的React项目,练习使用函数的传递,方便后续的学习

1-快速常见React项目

# 1-创建项目 pnpm create vite hello_react_v1 pnpm create vite hello_react_v1 --template react-ts # 2-项目运行 pnpm install pnpm dev # 3-添加项目依赖(选填) pnpm add clsx pnpm add tailwind-merge pnpm add autoprefixer pnpm add tailwindcss pnpm add @tailwindcss/postcss

2-页面编写

1-编写页面

functionMyButton(){return(<button>我是一个按钮11111</button>);}exportdefaultfunctionMyApp(){return(<div><h1>欢迎来到我的应用</h1><MyButton/></div>);}

2-添加数据

import{useState}from'react';interfaceUser{username:string;isLoggedIn:boolean;}functionMyButton(){// 对象操作-理解为set方法const[user,setUser]=useState<User>({username:'',isLoggedIn:false});consthandleLogIn=()=>{setUser({username:'张三',isLoggedIn:true})};consthandleLogout=()=>{setUser({username:'',isLoggedIn:false})};return(<div><h1>{user.username||'未登录'}</h1>{user.isLoggedIn?(<button onClick={handleLogout}>登出</button>):(<button onClick={handleLogIn}>登入</button>)}</div>);}exportdefaultfunctionMyApp(){return(<div><h1>欢迎来到我的应用</h1><MyButton/></div>);}

3-使用form表单

import{typeChangeEvent,typeFormEvent,useState}from'react';// 定义表单数据的类型接口interfaceLoginFormData{username:string;password:string;isLoggedIn:boolean;}functionMyFormData(){// 这里创建了两个状态:表单数据和登录状态const[formData,setFormData]=useState<LoginFormData>({username:'',password:'',isLoggedIn:false});consthandleSubmit=(e:FormEvent<HTMLFormElement>)=>{e.preventDefault();// 阻止表单默认提交(页面刷新)// 模拟登录验证(实际项目中这里会调用 API)setFormData(prev=>({...prev,isLoggedIn:true}));};// 处理输入框变化,更新状态(受控组件模式)consthandleInputChange=(e:ChangeEvent<HTMLInputElement>)=>{const{name,value}=e.target;// 更新表单数据状态setFormData(prev=>({...prev,[name]:value}));};consthandleLogout=()=>{setFormData({username:'',password:'',isLoggedIn:false})};return(<div><h1>{formData.isLoggedIn||'未登录'}</h1>{formData.isLoggedIn?(<button onClick={handleLogout}>登出</button>):(<form onSubmit={handleSubmit}><input type="text"value={formData.username}name="username"onChange={handleInputChange}placeholder="请输入用户名"/><br/><input type="password"value={formData.password}name="password"onChange={handleInputChange}placeholder="请输入密码"/><br/><button type="submit">登录</button></form>)}</div>);}exportdefaultfunctionMyApp(){return(<div><h1>欢迎来到我的应用</h1><MyFormData/></div>);}

4-完善form表单

import{typeChangeEvent,typeFormEvent,useState}from'react';// 定义表单数据的类型接口interfaceLoginFormData{username:string;password:string;isLoggedIn:boolean;}functionMyFormData(){// 这里创建了两个状态:表单数据和登录状态const[formData,setFormData]=useState<LoginFormData>({username:'',password:'',isLoggedIn:false});consthandleSubmit=(e:FormEvent<HTMLFormElement>)=>{e.preventDefault();// 阻止表单默认提交(页面刷新)// 简单的表单验证if(!formData.username.trim()||!formData.password.trim()){alert('请输入用户名和密码');return;}// 模拟登录验证(实际项目中这里会调用 API)if(formData.username==='admin'&&formData.password==='123456'){setFormData(prev=>({...prev,isLoggedIn:true}));alert('登录成功!');}else{alert('用户名或密码错误');// 可选:清空密码setFormData(prev=>({...prev,password:''}));}};// 处理输入框变化,更新状态(受控组件模式)consthandleInputChange=(e:ChangeEvent<HTMLInputElement>)=>{const{name,value}=e.target;// 更新表单数据状态setFormData(prev=>({...prev,[name]:value}));};consthandleLogout=()=>{setFormData({username:'',password:'',isLoggedIn:false})};return(<div><h1>{formData.isLoggedIn||'未登录'}</h1>{formData.isLoggedIn?(<button onClick={handleLogout}>登出</button>):(<form onSubmit={handleSubmit}><input type="text"value={formData.username}name="username"onChange={handleInputChange}placeholder="请输入用户名"/><br/><input type="password"value={formData.password}name="password"onChange={handleInputChange}placeholder="请输入密码"/><br/><button type="submit">登录</button></form>)}</div>);}exportdefaultfunctionMyApp(){return(<div><h1>欢迎来到我的应用</h1><MyFormData/></div>);}

http://www.jsqmd.com/news/438330/

相关文章:

  • 8周瘦肚子|6个高效动作,干掉内脏脂肪,腰围直接瘦一圈!
  • 智能除湿及紫外线消毒系统(有完整资料)
  • Python基于flask的在线教学课程网站小儿培训系统 作业考试学习记录s6462ul6
  • 基于单片机的车内儿童检测报警装置的设计(有完整资料)
  • 画世界Pro下载安装全攻略|2026官方正版安装包图文详解 - sdfsafafa
  • 揭秘沃伦勒夫运动手环:10 大专利铸就科技传奇,卫康沃伦勒夫/沃伦勒夫Warrenslove,沃伦勒夫手环真的有用吗 - 品牌推荐师
  • 2026年3月皮带提升机厂家最新推荐,聚焦垂直提升与物料转运 - 品牌鉴赏师
  • 基于单片机的室内空气质量检测系统设计(有完整资料)
  • 2026年GEO服务商选型指南:技术能力与行业适配双维度解析 - 品牌2026
  • 2026检测试验机优质品牌推荐榜 含引线剥头机 - 优质品牌商家
  • 本地jar包,制作Docker镜像,再推送镜像到K8s,重启K8s的操作过程。
  • 基于单片机的智能花盆(有完整资料)
  • LiteLLM 完全指南:统一 LLM API 网关
  • 聊聊学习用拉远镜,售后完善的拉远镜品牌企业哪家性价比高 - myqiye
  • 2026大空间纯电SUV推荐榜精选车型指南 - 博客万
  • 2026年北京上海等地室内家装设计师服务排名,推荐几家靠谱品牌 - 工业推荐榜
  • 【Docker】知识三 - 教程
  • 实用指南:pup区块链数据提取:解析分布式账本相关网页信息
  • 聊聊2026年高性价比的展会布置服务品牌企业,京津冀有哪些靠谱之选 - 工业品牌热点
  • 2026年有实力的消防应急照明集中电源,36v应急照明集中电源,集中电源集中控制应急照明系统厂家品牌推荐名录 - 品牌鉴赏师
  • 2026滚筒厂家综合实力测评报告:四大核心品牌推荐及选型指南 - 博客湾
  • 国内靠谱的经销商管理系统如何选 知名的DMS经销商管理系统服务供应商推荐 - 麦麦唛
  • 2026年3月流水线网链输送机厂家最新推荐,聚焦自动化产线与高效衔接 - 品牌鉴赏师
  • 毕业论文这些坑不要再采了
  • 2026四川AI服务器靠谱厂商推荐榜:最强算力服务器配置/服务器国产厂家/服务器存储厂家/服务器存储报价/服务器存储的价格/选择指南 - 优质品牌商家
  • 2026年正规的限流式电气防火保护器,三相限流式电气防火保护器,型电气防火限流式保护器厂家实力推荐 - 品牌鉴赏师
  • 深入理解 NCT 架构:代码级别的原理剖析(三)—— CNN vs NCT 对比与实践
  • 2026年华北地区室内家装设计师排名,哪家性价比高值得选 - mypinpai
  • 聊聊家装设计师怎么选,杨丰肇室内装修设计工作室性价比高吗? - 工业推荐榜
  • Netlify 表单处理深度解析