先看一下如下效果
效果
这是一个 简单的 效果 左边是用户名进行登录 右边是一个答题还有遮罩
相信大家还有刚刚创建好的 react 脚手架了,没有的话可以运行以下命令
creact-react-app 项目名称
把项目名称四个字 改成 自己想要的一个名字 最好是英文的在 App.js中去书写我们的代码
可以清晰看到 这就是一个·左右结构的 一个效果 可以考虑弹性 布局 让我们 给整个 dom先来一个父盒子 在 里面 来两个 子盒子 可以先用 颜色 加以区分
render 后 return下代码如下
在 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})
}
}
}
对其进行绑定
this.change(e)} placeholder='请输入用户名' />
{this.state.text}
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:'登录'})
}
}
更改一下 按钮的显示 左边的逻辑和样式到此完成
接下来开始 进行右侧效果
{this.state.list[this.state.num].title}
{
this.state.list[this.state.num].select.map((item,index)=>{
return
{this.setState({answer:index}) }}
checked={index==this.state.answer} />
{item}
})
}
开始进行 next函数的定义 以此进行题目的切换
next=()=>{
if(this.state.num
到此可以实现效果的实现
有些代码其实是可以简化的 可以进行结构赋值
let {text,flag,list,num,answer,wrong,right,btn,btn1}=this.state
最终代码可可以写成这样
this.change(e)} placeholder='请输入用户名' />
{text}
{list[num].title}
{
list[num].select.map((item,index)=>{
return
{this.setState({answer:index}) }}
checked={index==answer} />
{item}
})
}
你学废了吗? 下期开始进行 路由的讲解