React(3)
1.案例选项卡
import React, { Component } from 'react'export default class App extends Component {state={tabList:[{id:1,text:"电影"},{id:2,text:"影院"},{id:3,text:"我的"}]}render() {return (<div><ul>{this.state.tabList.map(item=><li key={item.id}>{item.text}</li>)}</ul></div>)}
}

进行样式修改:js引入css
import './css/02_tab.css'
*{margin: 0;padding: 0;
}ul{list-style: none;display: flex;position: fixed;bottom: 0px;left: 0px;height: 50px;line-height: 50px;width: 100%;
}ul li{flex:1;text-align:center
}

鼠标点击高亮显示
.active{color: red;
}
import React, { Component } from 'react'
import './css/02_tab.css'export default class App extends Component {state={tabList:[{id:1,text:"电影"},{id:2,text:"影院"},{id:3,text:"我的"}],currentKey:0}render() {return (<div><ul>{this.state.tabList.map((item,index)=><li key={item.id} className={this.state.currentKey==index?'active':''} onClick={()=>this.handlerClick(index)}>{item.text}</li>)}</ul></div>)}handlerClick(index){this.setState({currentKey:index})}
}

三个组件显示
新建三个组件
import React, { Component } from 'react'export default class Film extends Component {render() {return (<div>电影组件</div>)}
}
import React, { Component } from 'react'
import './css/02_tab.css'import Film from './tabComponent/film'
import My from './tabComponent/my'
import Cinema from './tabComponent/cinema'export default class App extends Component {state={tabList:[{id:1,text:"电影"},{id:2,text:"影院"},{id:3,text:"我的"}],currentKey:0}render() {return (<div>{this.showTable()}<ul>{this.state.tabList.map((item,index)=><li key={item.id} className={this.state.currentKey==index?'active':''} onClick={()=>this.handlerClick(index)}>{item.text}</li>)}</ul></div>)}handlerClick(index){this.setState({currentKey:index})}showTable(){switch(this.state.currentKey){case 0:return <Film></Film>case 1:return <Cinema></Cinema>case 2:return <My></My>}}
}
点击可以切换

2.请求数据
react中使用axios第三方的库 ,专门用来请求数据
先安装
npm i axios
import React, { Component } from 'react'
import axios from 'axios'export default class Cinema extends Component {constructor() {super();//react中使用axios第三方的库 专门用来请求数据// axios.get("请求地址").then(res=>{}).catch(err=>{console.log(err);})axios({url:"https://m.maizuo.com/gateway?cityId=110100&ticketFlag=1&k=7406159",method:'get',headers:{'X-Client-Info':'{"a":"3000","ch":"1002","v":"5.0.4","e":"16395416565231270166529","bc":"110100"}','X-Host':'mall.film-ticket.cinema.list'}}).then(res=>{console.log(res)}).catch(err=>console.log(err))}render() {return (<div>影院组件</div>)}
}

res.data

*{margin: 0;padding: 0;
}ul{list-style: none;display: flex;position: fixed;bottom: 0px;left: 0px;height: 50px;line-height: 50px;width: 100%;background-color: white;
}ul li{flex:1;text-align:center
}.active{color: red;
}dl{height: 50px;border-bottom: 1px solid gray;
}
dl dt{font-size: 20px;
}
dl dd{font-size: 12px;color: gray;
}
import React, { Component } from 'react'
import axios from 'axios'export default class Cinema extends Component {constructor() {super();this.state = {cinemaList: []}//react中使用axios第三方的库 专门用来请求数据// axios.get("请求地址").then(res=>{}).catch(err=>{console.log(err);})axios({url: "https://m.maizuo.com/gateway?cityId=110100&ticketFlag=1&k=7406159",method: 'get',headers: {'X-Client-Info': '{"a":"3000","ch":"1002","v":"5.0.4","e":"16395416565231270166529","bc":"110100"}','X-Host': 'mall.film-ticket.cinema.list'}}).then(res => {console.log(res.data)this.setState({cinemaList: res.data.data.cinemas})}).catch(err => console.log(err))}render() {return (<div>{this.state.cinemaList.map((item) => <dl key={item.cinemaId}><dt>{item.name}</dt><dd>{item.address}</dd></dl>)}</div>)}
}

3.模糊搜索
利用input 属性onInput可以实时监测输入框变化
先尝试监控输入框改变并打印改变的内容
import React, { Component } from 'react'
import axios from 'axios'export default class Cinema extends Component {constructor() {super();this.state = {cinemaList: []}//react中使用axios第三方的库 专门用来请求数据// axios.get("请求地址").then(res=>{}).catch(err=>{console.log(err);})axios({url: "https://m.maizuo.com/gateway?cityId=110100&ticketFlag=1&k=7406159",method: 'get',headers: {'X-Client-Info': '{"a":"3000","ch":"1002","v":"5.0.4","e":"16395416565231270166529","bc":"110100"}','X-Host': 'mall.film-ticket.cinema.list'}}).then(res => {console.log(res.data)this.setState({cinemaList: res.data.data.cinemas})}).catch(err => console.log(err))}render() {return (<div><div><input onInput={this.handleInput}></input>实时搜索</div>{this.state.cinemaList.map((item) =><dl key={item.cinemaId}><dt>{item.name}</dt><dd>{item.address}</dd></dl>)}</div>)}handleInput(event){console.log("input",event.target.value);}
}

实时模糊搜索
数组的filter方法不会影响原数组
import React, { Component } from 'react'
import axios from 'axios'export default class Cinema extends Component {constructor() {super();this.state = {cinemaList: [],backcinemaList: []}//react中使用axios第三方的库 专门用来请求数据// axios.get("请求地址").then(res=>{}).catch(err=>{console.log(err);})axios({url: "https://m.maizuo.com/gateway?cityId=110100&ticketFlag=1&k=7406159",method: 'get',headers: {'X-Client-Info': '{"a":"3000","ch":"1002","v":"5.0.4","e":"16395416565231270166529","bc":"110100"}','X-Host': 'mall.film-ticket.cinema.list'}}).then(res => {console.log(res.data)this.setState({cinemaList: res.data.data.cinemas,backcinemaList: res.data.data.cinemas})}).catch(err => console.log(err))}render() {return (<div><div><input onInput={this.handleInput}></input>实时搜索</div>{this.state.cinemaList.map((item) =><dl key={item.cinemaId}><dt>{item.name}</dt><dd>{item.address}</dd></dl>)}</div>)}handleInput = (event) => {console.log("input", event.target.value);// 数组的filter方法不会影响原数组var newList = this.state.backcinemaList.filter(item => item.name.toUpperCase().includes(event.target.value.toUpperCase()) ||item.address.toUpperCase().includes(event.target.value.toUpperCase()))this.setState({cinemaList:newList})}
}

4.setState说明
setState在同步代码使用时是异步的,在异步代码使用时同步的
也就说setState更新状态,可能react背后不是立即就更新state的 所以如果你再setState方法后紧随其后获取当前state中的值,可能会发现获取的值还是之前没更新的,更新并没有生效
方法:
如果是在同步执行代码中,可以使用setState的回调函数,回调函数中一定是已经更新完状态的
this.setState({cinemaList: res.data.data.cinemas,backcinemaList: res.data.data.cinemas},()=>{//回调函数中执行你的需求 })
如果是在异步中就无所谓了
5.平滑滚动better-scroll
引入better-scroll库
npm i better-scroll
作用就是使一个显示很长的数据可以在一个固定很短的区域中显示滑动 要求必须一个很短的区域 包裹一个很长的区域
就拿上文中的cinemaList来做
修改:
import React, { Component } from 'react'
import axios from 'axios'
import BetterScroll from 'better-scroll'export default class Cinema extends Component {constructor() {super();this.state = {cinemaList: [],backcinemaList: []}//react中使用axios第三方的库 专门用来请求数据// axios.get("请求地址").then(res=>{}).catch(err=>{console.log(err);})axios({url: "https://m.maizuo.com/gateway?cityId=110100&ticketFlag=1&k=7406159",method: 'get',headers: {'X-Client-Info': '{"a":"3000","ch":"1002","v":"5.0.4","e":"16395416565231270166529","bc":"110100"}','X-Host': 'mall.film-ticket.cinema.list'}}).then(res => {console.log(res.data)this.setState({cinemaList: res.data.data.cinemas,backcinemaList: res.data.data.cinemas})new BetterScroll(".wrapper")}).catch(err => console.log(err))}render() {return (<div><div><input onInput={this.handleInput}></input>实时搜索</div><div className='wrapper' style={{height:'600px',overflow:'hidden'}}><div className='content'>{this.state.cinemaList.map((item) =><dl key={item.cinemaId}><dt>{item.name}</dt><dd>{item.address}</dd></dl>)}</div></div></div>)}handleInput = (event) => {console.log("input", event.target.value);// 数组的filter方法不会影响原数组var newList = this.state.backcinemaList.filter(item => item.name.toUpperCase().includes(event.target.value.toUpperCase()) ||item.address.toUpperCase().includes(event.target.value.toUpperCase()))this.setState({cinemaList: newList})}
}
此时滚动很丝滑 还带点惯性哈哈哈哈哈
相关文章:
React(3)
1.案例选项卡 import React, { Component } from reactexport default class App extends Component {state{tabList:[{id:1,text:"电影"},{id:2,text:"影院"},{id:3,text:"我的"}]}render() {return (<div><ul>{this.state.tabList…...
LangChain大型语言模型(LLM)应用开发(三):Chains
LangChain是一个基于大语言模型(如ChatGPT)用于构建端到端语言模型应用的 Python 框架。它提供了一套工具、组件和接口,可简化创建由大型语言模型 (LLM) 和聊天模型提供支持的应用程序的过程。LangChain 可以轻松管理与语言模型的交互&#x…...
FPGA——点亮led灯
文章目录 一、实验环境二、实验任务三、实验过程3.1 编写verliog程序3.2 引脚配置 四、仿真4.1 仿真代码4.2仿真结果 五、实验结果六、总结 一、实验环境 quartus18.1 vscode Cyclone IV开发板 二、实验任务 每间隔1S实现led灯的亮灭,实现流水灯的效果。 三、实…...
idea创建spark教程
1、环境准备 java -version scala -version mvn -version spark -version 2、创建spark项目 创建spark项目,有两种方式;一种是本地搭建hadoop和spark环境,另一种是下载maven依赖;最后在idea中进行配置,下面分别记录两…...
【JavaEE】DI与DL的介绍-Spring项目的创建-Bean对象的存储与获取
Spring的开发要点总结 文章目录 【JavaEE】Spring的开发要点总结(1)1. DI 和 DL1.1 DI 依赖注入1.2 DL 依赖查询1.3 DI 与 DL的区别1.4 IoC 与 DI/DL 的区别 2. Spring项目的创建2.1 创建Maven项目2.2 设置国内源2.2.1 勾选2.2.2 删除本地jar包2.2.3 re…...
C#图片处理
查找图片所在位置 原理:使用OpenCvSharp对比查找小图片在大图片上的位置 private static System.Drawing.Point Find(Mat BackGround, Mat Identify, double threshold 0.8) {using (Mat res new Mat(BackGround.Rows - Identify.Rows 1, BackGround.Cols - Iden…...
php 开发微信 h5 支付 APIv3 接入超详细流程
✨ 目录 🎈 申请商户号🎈 申请商户证书🎈 设置V3密钥🎈 开通H5支付🎈 设置支付域名🎈 SDK 下载🎈 第一次下载平台证书🎈非第一次下载平台证书🎈 H5下单 🎈 申…...
HTML学习 第一部分(前端学习)
参考学习网站: 网页简介 (w3schools.com) 我的学习思路是:网站实践视频。 视频很重要的,因为它会给你一种开阔思路的方式。你会想,噢!原来还可以这样。这是书本或者网站教程 所不能教给你的。而且,对一些教程&#…...
python 实现串口指令通讯
上一篇文章文章写了串口数据的读取,这篇文章讲串口数据的写入(指令控制) 与下位机通信往往需要十六进制形式进行数据通信,根据设备串口通信指令文档进行指令通信,本篇以灯光控制为例: 1.pyserial模块封装…...
pytorch深度学习逻辑回归 logistic regression
# logistic regression 二分类 # 导入pytorch 和 torchvision import numpy as np import torch import torchvision from torch.autograd import Variable import torch.nn as nn import torch.nn.functional as F import torch.optim as optim import matplotlib.pyplot as …...
数据仓库建设-数仓分层
数据仓库能够帮助企业做出更好的决策,提高业务效率和效益;在数据仓库建设时,绕不开的话题就是数仓分层。 一、数据分层的好处 1. 降低数据开发成本 通用的业务逻辑加工好,后续的开发任务可以基于模型快速使用,数据需…...
共享与协作:时下最热门的企业共享网盘推荐!
现代企业面临着越来越大的数据存储和共享压力。为了提高公司的生产力和效率,许多企业开始寻找共享网盘解决方案。这些共享网盘平台可以帮助企业集中管理文件和数据,并方便快速地与同事、客户或供应商共享。以下是几款好用的企业共享网盘。 Zoho Workdriv…...
mysql取24小时数据
MySQL是一种常用的关系型数据库管理系统。在进行实时数据处理时,我们常常需要查询最近24小时的数据来进行分析和处理。下面我们将介绍如何使用MySQL查询最近24小时的数据。 SELECT * FROM table_name WHERE timestamp_column > DATE_SUB(NOW(), INTERVAL 24 HOU…...
TCP/IP网络编程 第十五章:套接字和标准I/O
标准I/O函数的优点 标准I/O函数的两个优点 将标准I/O函数用于数据通信并非难事。但仅掌握函数使用方法并没有太大意义,至少应该 了解这些函数具有的优点。下面列出的是标准I/O函数的两大优点: □标准I/O函数具有良好的移植性(Portability) □标准I/O函数可以利用缓…...
SaleSmartly,客户满意度调查的绝对好助手
企业使用客户满意度调查来收集反馈并评估客户满意度水平,包括有关产品质量、服务、支持和整体满意度的问题。客户满意度调查的主要目标是直接从客户那里收集有价值的见解,以了解他们的需求、偏好和期望。这种反馈可以帮助企业确定需要改进的领域…...
MySQL高阶语句
文章目录 一.常用查询1.按关键字排序(ORDER BY 语句)1.1 语法格式1.2 ASC和DESC的排序概念1.3 举例1.3.1 数据库有一张info表,记录了学生的id,姓名,分数,地址和爱好1.3.2 按分数排序,默认不指定…...
手机快充协议
高通:QC2.0、QC3.0、QC3.5、QC4.0、QC5.0、 FCP、SCP、AFC、SFCP、 MTKPE1.1/PE2.0/PE3.0、TYPEC、PD2.0、PD3.0/3.1、VOOC 支持 PD3.0/PD2.0 支持 QC3.0/QC2.0 支持 AFC 支持 FCP 支持 PE2.0/PE1.1 联发科的PE(Pump Express)/PE 支持 SFCP 在PP…...
centos 7升级gcc到10.5.0
目录 1、安装gcc 1.1、查看是否含有gcc及gcc版本 1.2、快速安装gcc 2、升级gcc 2.1、下载gcc源码包并解压缩 2.2、下载编译依赖项 2.3、新建gcc-bulid目录(与gcc-10.5.0同级)并进入该目录中 2.4、生成Makefile文件 2.5、开始编译 2.6、安装 2…...
从脚手架搭建到部署访问路程梳理
1、vue-cli 起文件: 2、配置 webpack :打包配置等,env文件( 处理线上和测试的ip), https://www.ibashu.cn/news/show_377892.html 3、样式:封装 style :组件(element-u…...
数据库应用:MySQL数据库SQL高级语句与操作
目录 一、理论 1.克隆表与清空表 2.SQL高级语句 3.SQL函数 4.SQL高级操作 5.MySQL中6种常见的约束 二、实验 1.克隆表与清空表 2.SQL高级语句 3.SQL函数 4.SQL高级操作 5.主键表和外键表 三、总结 一、理论 1.克隆表与清空表 克隆表:将数据表的数据记录…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...
最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...
跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...
用鸿蒙HarmonyOS5实现中国象棋小游戏的过程
下面是一个基于鸿蒙OS (HarmonyOS) 的中国象棋小游戏的实现代码。这个实现使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chinesechess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├──…...
【WebSocket】SpringBoot项目中使用WebSocket
1. 导入坐标 如果springboot父工程没有加入websocket的起步依赖,添加它的坐标的时候需要带上版本号。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dep…...
快速排序算法改进:随机快排-荷兰国旗划分详解
随机快速排序-荷兰国旗划分算法详解 一、基础知识回顾1.1 快速排序简介1.2 荷兰国旗问题 二、随机快排 - 荷兰国旗划分原理2.1 随机化枢轴选择2.2 荷兰国旗划分过程2.3 结合随机快排与荷兰国旗划分 三、代码实现3.1 Python实现3.2 Java实现3.3 C实现 四、性能分析4.1 时间复杂度…...
