react 案例的实现

先看一下如下效果

效果

这是一个 简单的 效果 左边是用户名进行登录 右边是一个答题还有遮罩

 相信大家还有刚刚创建好的 react 脚手架了,没有的话可以运行以下命令

creact-react-app 项目名称

把项目名称四个字 改成 自己想要的一个名字 最好是英文的在 App.js中去书写我们的代码 

1 完成 整体页面的布局

   可以清晰看到 这就是一个·左右结构的 一个效果 可以考虑弹性 布局  让我们 给整个 dom先来一个父盒子 在 里面 来两个 子盒子  可以先用 颜色 加以区分

 render 后 return下代码如下 

​<div className='box'><div className='left'></div><div className='right'></div></div>​

  在 react中 我们  可以 直接对 css文件进行引入 可以去创建一个css 比如可以叫它 mine.css

 在这里定义一些样式 

.box {display: flex;height: 100vh;
}.left {flex: 1;background-color: red;
}.right {flex: 2;background-color: blue;
}

  引入这个 css    大概看到如下 效果

import './mine.css'

  ​​​​​​​​​​​​​​

出现说明引入成功 ,可以将 左边的 背景去除  将右边的 改为黑色 先完成左边的内容

左边效果

 state 中 添加  username:'' 用于 接收 用户输入的用户名  添加 text 来 用于控制 文字的显示 

 再来一个 flag来控制 右边的样式 

state = {username: '',text:'',flag:false}

 在  state下面 可以添加change函数 

   change=(e)=>{console.log(e.target.value)this.setState({username:e.target.value})}

 再添加一个 登录的函数 login 

  login=()=>{if(this.state.username==''){alert('请输入用户名')}else{if( this.state.username.length<6 || this.state.username>18 ){this.setState({text:'用户名长度为6-18位'})}else{this.setState({ text:'',flag:true})}}}

对其进行绑定 

    <div className='box'><div className='left'><input onChange={(e)=> this.change(e)} placeholder='请输入用户名' /><span style={{color:'red'}}>{this.state.text}</span><br></br><button onClick={this.login}>登录</button></div><div className={this.state.flag?'right1':'right'}></div></div>​

 main.css中 可以改一下 

.right {flex: 2;background-color: rgb(1, 1, 2);
}
.right1 {flex: 2;}

在 state中 定义 list  以此渲染 题目

    list:[{title:'br标签是干什么的?',select:['实现换行的','显示图片的','制作按钮的','实现分段的'],'answer':0},{title:'img标签是干什么的?',select:['实现换行的','显示图片的','制作按钮的','实现分段的'],'answer':1},{title:'button标签是干什么的?',select:['实现换行的','显示图片的','制作按钮的','实现分段的'],'answer':2}, {title:'p标签是干什么的?',select:['实现换行的','显示图片的','制作按钮的','实现分段的'],'answer':3},]

 title是题目 select选项 answei为 正确的答案  可以再定义 如下 

   num:0,wrong:0,right:0,btn:'登录',aswer:-1

 让我们重新更新一下  login这个函数 

  login=()=>{if(this.state.btn=='登录'){if(this.state.username==''){alert('请输入用户名')}else{if( this.state.username.length<6 || this.state.username.length>18 ){this.setState({text:'用户名长度为6-18位'})}else{console.log(this.state.flag);this.setState({ text:'',flag:true})this.setState({btn:'退出'})}}}else{this.setState({flag:false})this.setState({btn:'登录'})} }

 更改一下 按钮的显示  左边的逻辑和样式到此完成

<button onClick={this.login}>{this.state.btn}</button>

接下来开始 进行右侧效果 

      <div className={this.state.flag?'right1':'right'}><h3>{this.state.list[this.state.num].title}</h3>{this.state.list[this.state.num].select.map((item,index)=>{return <div key={index} className='select'><input type='radio' name='select' onChange={()=>{this.setState({answer:index}) }} checked={index==this.state.answer} />{item}</div>})}<button onClick={this.next}>{this.state.num<this.state.list.length-1?'下一题':'重新开始'}</button><br></br>{this.state.num+1}/4 答对{this.state.right}  答错 {this.state.wrong}</div>

开始进行 next函数的定义  以此进行题目的切换

  next=()=>{if(this.state.num<this.state.list.length-1){if(this.state.answer==-1){alert('请选择答案')}else{   if(this.state.answer==this.state.list[this.state.num].answer){this.setState({right:this.state.right+1})}else{this.setState({wrong:this.state.wrong+1})}this.setState({num:this.state.num+1})}this.setState({answer:-1})}else{this.setState({num:0,wrong:0,right:0})}}

 到此可以实现效果的实现 

代码的简化

 有些代码其实是可以简化的  可以进行结构赋值

let {text,flag,list,num,answer,wrong,right,btn,btn1}=this.state

最终代码可可以写成这样

 <div className='box'><div className='left'><input onChange={(e)=> this.change(e)} placeholder='请输入用户名' /><span style={{color:'red'}}>{text}</span><br></br><button onClick={this.login}>{btn}</button></div><div className={flag?'right1':'right'}><h3>{list[num].title}</h3>{list[num].select.map((item,index)=>{return <div key={index} className='select'><input type='radio' name='select' onChange={()=>{this.setState({answer:index}) }} checked={index==answer} />{item}</div>})}<button onClick={this.next}>{num<list.length-1?'下一题':'重新开始'}</button><br></br>{num+1}/4 答对{right}  答错 {wrong}</div></div>

你学废了吗?  下期开始进行 路由的讲解

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

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

相关文章

python xpath常用代码功能

1、从文件中读取html内容&#xff0c;然后xpath加载 with open(FilePath, r,encodingutf8) as file:html file.read() tree etree.HTML(html) 2、基本定位语法 / 从根节点开始选取 /html/div/span // 从任意节点开始选取 //input . 选取当前节点 .…

Web开发:<br>标签的作用

br作用 介绍基本用法常见用途注意事项使用CSS替代 介绍 在Web开发中&#xff0c;<br> 标签是一个用于插入换行符的HTML标签。它是“break”的缩写&#xff0c;常用于需要在文本中强制换行的地方。<br> 标签是一个空标签&#xff0c;这意味着它没有结束标签。 基本…

Python小工具—txt转excel和word

1.txt转excel import openpyxl# 创建一个新的Excel工作簿 wb = openpyxl.Workbook() sheet = wb.active# 题干和答案的标题 sheet[A1] = 题干 sheet[B1] = 答案# 打开txt文件并读取内容 with open(xiti.txt, r, encoding=utf-8) as file:lines = file.readlines()# 初始变量 c…

VisualTreeHelper.GetChildrenCount

在WPF&#xff08;Windows Presentation Foundation&#xff09;中&#xff0c;VisualTreeHelper.GetChildrenCount 是一个非常有用的方法&#xff0c;用于获取指定视觉对象的子元素数量。这对于遍历复杂的用户界面树结构以进行查找、操作或检查特定元素是非常有帮助的。 Visu…

【java深入学习第7章】用 Spring Boot 和 Java Mail 轻松实现邮件发送功能

引言 在现代的企业应用中&#xff0c;邮件发送是一个非常常见的功能。无论是用户注册后的验证邮件&#xff0c;还是系统通知邮件&#xff0c;邮件服务都扮演着重要的角色。本文将介绍如何在Spring Boot项目中整合Java Mail&#xff0c;实现发送邮件的功能。 一、准备工作 在…

【Ubuntu】安装使用pyenv - Python版本管理

当我们在Ubuntu上使用Python进行开发的时候&#xff0c;可能会遇到版本不兼容的问题&#xff0c;当然你可以选择使用apt的方式安装不同版本的python环境 但是存在一定的问题&#xff1a;安装不同版本的Python通常不会改变默认的python3命令指向的版本&#xff0c;而且就算你进行…

分布式对象存储minio

本教程minio 版本&#xff1a;RELEASE.2021-07-*及以上 1. 分布式文件系统应用场景 互联网海量非结构化数据的存储需求 电商网站&#xff1a;海量商品图片视频网站&#xff1a;海量视频文件网盘 : 海量文件社交网站&#xff1a;海量图片 1.1 Minio介绍 MinIO 是一个基于Ap…

ubuntu服务器部署vue springboot前后端分离项目

上传构建好的vue前端文件 vscode构建vue项目&#xff0c;会生成dist目录 npm run build在服务器root目录新建/projects/www目录&#xff0c;把dist目录下的所有文件&#xff0c;上传到此目录中 上传ssl证书 上传ssl证书到/projects目录中 配置nginx 编辑 /etc/nginx/site…

微服务边界守卫:Eureka中服务隔离策略的实现

微服务边界守卫&#xff1a;Eureka中服务隔离策略的实现 在微服务架构中&#xff0c;服务隔离是一项关键策略&#xff0c;用于确保服务之间的故障不会相互影响&#xff0c;同时提供更加安全和稳定的运行环境。Eureka作为Netflix开源的服务发现框架&#xff0c;提供了一些机制来…

Java 网络协议面试题答案整理,最新面试题

TCP和UDP的主要区别是什么? TCP(传输控制协议)和UDP(用户数据报协议)的主要区别在于TCP是面向连接的协议,而UDP是无连接的协议。这导致了它们在数据传输方式、可靠性、速度和使用场景方面的不同。 1、连接方式: TCP是面向连接的协议,数据传输前需要三次握手建立连接。U…

区块链与云计算的融合:新时代数据安全的挑战与机遇

随着信息技术的迅猛发展&#xff0c;云计算和区块链技术作为两大前沿技术在各自领域内展示出了巨大的潜力。而它们的结合&#xff0c;即区块链与云计算的融合&#xff0c;正在成为数据安全领域的新趋势。本文将探讨这一融合对数据安全带来的挑战和机遇&#xff0c;以及其在企业…

平替ChatGPT的多模态智能体来了

在人工智能领域&#xff0c;多模态技术的融合与应用已成为推动技术革新的关键。今天&#xff0c;我们用智匠AI实现了完全由国产模型驱动的多模态智能体——智酱v0.1.0&#xff0c;它不仅能够媲美ChatGPT的多模态能力&#xff0c;更在联网搜索、图片识别、画图及图表生成等方面展…

redis原理之底层数据结构(二)-压缩列表

1.绪论 压缩列表是redis最底层的结构之一&#xff0c;比如redis中的hash&#xff0c;list在某些场景下使用的都是压缩列表。接下来就让我们看看压缩列表结构究竟是怎样的。 2.ziplist 2.1 ziplist的组成 在低版本中压缩列表是由ziplist实现的&#xff0c;我们来看看他的结构…

Stable Diffusion AI绘画全攻略:从理论到实战,解锁创意图画的魔法之门

在科技的飞速发展中&#xff0c;Stable Diffusion AI绘画技术为艺术创作带来了前所未有的革命性变化。这项技术由CompVis、Stability AI和LAION联合研发&#xff0c;通过深度学习模型&#xff0c;将文字描述转化为生动的艺术作品&#xff0c;极大地拓宽了创意与想象的边界。本文…

大数据面试SQL题-笔记01【运算符、条件查询、语法顺序、表连接】

大数据面试SQL题复习思路一网打尽&#xff01;(文档见评论区)_哔哩哔哩_bilibiliHive SQL 大厂必考常用窗口函数及相关面试题 大数据面试SQL题-笔记01【运算符、条件查询、语法顺序、表连接】大数据面试SQL题-笔记02【...】 目录 01、力扣网-sql题 1、高频SQL50题&#xff08…

TCP、UDP、TCP与UDP的区别及联系

目录 TCP和UDP区别1.连接2.交互个数3.可靠性4.传输方式5.适用场景 怎么实现一个可靠的UDP传输TCP详解UDP详解 TCP和UDP区别 1.连接 TCP 面向连接的&#xff0c;传输数据前先要建立连接。 UDP 是不需要连接&#xff0c;即刻传输数据。 2.交互个数 TCP 是一对一通信。 UDP 支…

数据结构——hash(hashmap源码探究)

hash是什么&#xff1f; hash也称为散列&#xff0c;就是把任意长度的输入&#xff0c;通过散列算法&#xff0c;变成固定长度的输出&#xff0c;这个输出值就是散列值。 举例来说明一下什么是hash&#xff1a; 假设我们要把1~12存入到一个大小是5的hash表中&#xff0c;我们…

矿产资源潜力预测不确定性评价

研究目的&#xff1a; 不确定性评估&#xff1a; 到底什么叫不确定性&#xff0c;简单来说就是某区域内的矿产资源量&#xff0c;并不确定到底有多少&#xff0c;你需要给出一个评估或者分布。 研究方法&#xff1a; 1.以模糊集来表示某些量&#xff1a; 关于什么是模糊集&am…

信通院全景图发布 比瓴科技领跑软件供应链安全,多领域覆盖数字安全服务

近日&#xff0c;中国信息通信研究院在2024全球数字经济大会—数字安全生态建设专题论坛正式发布首期《数字安全护航技术能力全景图》&#xff08;以下简称全景图&#xff09;。 比瓴科技入选软件供应链安全赛道“开发流程安全管控、交互式安全测试、静态安全测试、软件成分分…

智慧水利:迈向水资源管理的新时代,结合物联网、云计算等先进技术,阐述智慧水利解决方案在提升水灾害防控能力、优化水资源配置中的关键作用

本文关键词&#xff1a;智慧水利、智慧水利工程、智慧水利发展前景、智慧水利技术、智慧水利信息化系统、智慧水利解决方案、数字水利和智慧水利、数字水利工程、数字水利建设、数字水利概念、人水和协、智慧水库、智慧水库管理平台、智慧水库建设方案、智慧水库解决方案、智慧…