React客户端实时搜索功能的实现

1 效果

在搜索框中输入内容后,列表即时渲染匹配的元素,不需要回车或按钮

2 思路

  1. 除了原始的列表数据,state中增加一个用于渲染的空列表
  2. 通过onChange事件实时获取输入框的值
  3. 当输入框值为空时,渲染列表等于原始列表
  4. 输入框值不为空时,先将渲染列表设为空,然后遍历原始列表,如果有匹配的元素则加入到渲染列表

3 代码

import React from 'react';

class List extends React.Component{
    constructor(props){
        super(props);
        this.state = {
            listData: [原始列表数据],
            list2show: []//用于渲染的列表
        }
    }

    // 实时更改渲染列表的数据
    search(event){
        var keyword = event.target.value

        if(keyword){
            var listData = this.state.listData
            var list2show = []
            for (var i=0; i<listData.length; i++){
                if(listData[i].match(keyword)){
                    list2show = [...list2show, listData[i]]
                }
            }

            this.setState({
                list2show: list2show
            })
        }
        else{
            this.setState({
                list2show: this.state.listData
            })
        }
    }

    render(){
        // 使用渲染列表的数据,而不是原始列表
        const Item = this.state.list2show.map((item, index) => 
            <p key={index}>item</p> // 不建议使用index作为key,最好元素本身带有key
        )

        return(
            <div>
                <input onChange={this.search.bind(this)}/> // 搜索框
                <ul>{Item}</ul>
            </div>
        )
    }
}

export default List;
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

酒桶在你野区

感谢支持!????

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值