React(3)

news2024/11/24 11:02:59

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
        })
    }
}

此时滚动很丝滑  还带点惯性哈哈哈哈哈

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

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

相关文章

verilog实现pwm呼吸灯

文章目录 verilog实现pwm呼吸灯一、简介二、代码设计三、仿真代码编写四、仿真结果五、总结 verilog实现pwm呼吸灯 一、简介 呼吸灯是指灯光在微电脑的控制之下完成由亮到暗的逐渐变化&#xff0c;感觉好像是人在呼吸。其广泛应用于手机之上&#xff0c;并成为各大品牌新款手…

杰理-AC695-页面之间跳转、页面内布局切换

杰理-AC695-页面之间跳转、页面内布局切换 //布局切换 ui_show(BT_MENU_LAYOUT); //页面切换 ui_hide_main(ID_WINDOW_BT); ui_show_main(ID_WINDOW_SYS);

3、java入门教程【数据类型】

一、概述 java中数据类型分为两大类&#xff1a;【基本数据类型】和【引用数据类型】 二、基础数据类型 数据类型含义默认值取值范围存储大小&#xff08;字节&#xff09;整型byte字节型0-128 到 1271整型short短整型0-2^15 到 2^15-12整型int【默认】整形0-2^31 到 2^31-14…

TMS Scripter v7.28 for Delphi

TMS Scripter v7.28 for Delphi 使用本地Pascal或Basic脚本以及带有可视化表单设计器、对象检查器等的完整IDE(集成开发环境)&#xff0c;为您的应用程序添加终极灵活性和强大功能。通过在您的应用程序中构建脚本支持&#xff0c;您可以在应用程序中提供高度的可配置性、灵活性…

fiddler抓取,Android真机测试

1.配置Fiddler抓取并解密HTTPS包 Fiddler默认是不抓取HTTPS包的&#xff0c;需要进行相应的配置。 打开Fiddler&#xff0c;选择“Tools->Fiddler Options...” 2.在弹出的对话框中选择“HTTPS”选项卡&#xff1a; 3.勾选“Capture HTTPS CONNECTs”&#xff0c;接着勾选…

Elisp之获取绝对路径和相对路径(二十三)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

Javascript 如何实现继承?

简单来说 js 实现继承的方式有很多种&#xff0c;比如 原型链继承、借用构造函数继承、组合继承、寄生继承、寄生组合继承、ES6 新增的 extends 继承一般我开发中用的比较多的就是 原型链继承 还有 class 类函数继承。 其他的基本用得少&#xff0c;主要是平时看一些技术博客类…

MySql 知识大汇总

目录 一、常用的数据类型 二、数据库索引 什么是数据库索引 索引的作用 索引是否越多越好 索引的分类 三、sql语句 插入 更新 删除 查询 普通查询 子查询 连表查询 四、常用的一些函数 group by 分组 order by 排序 HAVING 子句 根据条件…

5、传输层UDP28

传输层&#xff1a;负责俩端之间的数据传输&#xff08;TCP&UDP&#xff09; UDP协议&#xff1a;协议格式&#xff08;协议实现&#xff09;、协议特性、编程影响 一、协议格式&#xff08;协议实现&#xff09; 面试&#xff1a;传输层的数据结构是什么&#xff1f; 就是…

1.计算机系统概述

1.1 计算机发展历程 1.1.1计算机硬件的发展 1.逻辑元件的四代变化&#xff1a; 电子管->晶体管->中小规模集成电路->超大规模集成电路 第四代计算机时代产生了微处理器&#xff0c;是微型计算机发展的标志。 2. 计算机元件的更新换代 如半导体存储器、微处理器都在不断…

IDEA配置maven国内源

这里写目录标题 前言注意第一步 前言 为什么要配置maven国内源, 因为如果不配置国内源,一个是依赖加载速度过慢, 另一个是可能会导致创建spring / Springboot创建失败,或者是在maven项目中引入jar包失败,从而导致项目运行失败 注意 配置要配置俩次 第一步 选择settings …

【复习8-9天内容】【我们一起60天准备考研算法面试(大全)-第十三天 13/60】

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客&#xff0c;如有问题交流&#xff0c;欢迎评论区留言&#xff0c;一定尽快回复&#xff01;&#xff08;大家可以去看我的专栏&#xff0c;是所有文章的目录&#xff09;   文章字体风格&#xff1a; 红色文字表示&#…

数字检测Y8S

【免费】数字检测Y8S&#xff0c;只需要OPENCV-深度学习文档类资源-CSDN文库 采用YOLOV8训练&#xff0c;得到PT模型&#xff0c;然后直接转ONNX&#xff0c;使用OPENCV的DNN&#xff0c;不需要其他依赖&#xff0c;支持C/PYTHON

【CodeWhisperer】 亚马逊AI辅助代码生成工具

Amazon CodeWhisperer 定价 Amazon CodeWhisperer 直接在集成式开发环境 (IDE) 中为开发人员提供实时代码建议。个人开发人员可以免费使用 CodeWhisperer。组织为使用 CodeWhisperer 按“每位用户每月”支付固定的订阅费&#xff0c;无需预付费用或长期承诺。 CodeWhisperer 提…

Docker安装tomcat

docker hub上面查找tomcat镜像 docker search tomcat 从docker hub上拉取tomcat镜像到本地 docker pull tomcat docker images查看是否有拉取到的tomcat docker images 使用tomcat镜像创建容器实例(也叫运行镜像) docker run -d -p 8080:8080 tomcat 说明 -p 小写&#xff0c;…

GPipe:微批量流水线并行

论文标题&#xff1a;GPipe: Easy Scaling with Micro-Batch Pipeline Parallelism论文链接&#xff1a;https://arxiv.org/abs/1811.06965论文来源&#xff1a;Google 一、概述 如下图所示&#xff0c;近过去十年中&#xff0c;由于开发了促进神经网络有效容量扩大的方法&…

【Unity3D】伽马校正

1 伽马相关概念 1.1 人眼对亮度变化的感知 人眼对亮度变化的感知不是线性的&#xff0c;如下图&#xff0c;人眼对亮区的亮度变化不太敏感&#xff0c;对暗区的亮度变化较敏感。另外&#xff0c;我们可以想象一下&#xff0c;在一个黑暗的房间里&#xff0c;由 1 根蜡烛到 2 根…

【改进粒子群优化算法】基于惯性权重和学习因子动态调整的粒子群算法【期刊论文复现】(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

面试题之MySQL事物的特性

在关系性数据库管理系统配置&#xff0c;一个逻辑工作要成为事物&#xff0c;必须要满足4个特性&#xff0c;即所谓的ACID:原子性(Atomicity),一致性(Consistency)、隔离性(lsolation)和持久性(Durability)。 原子性: 原子性:事物作为一个整体被执行&#xff0c;包含在其中对…

Redis - 为什么我要来安利你学习 Redis ?

目录 前言 一、Redis 的特性&#xff08;优点&#xff09; 1. Redis 是在内存中存储数据的 2.可编程性 3.可扩展性 4.持久化 5.支持集群 6.高可用 二、Redis 为什么快&#xff1f; 三、 Redis 使用场景 优势场景 1.将 Redis 当作数据库 2.作为缓存和存储 session …