我的编程空间,编程开发者的网络收藏夹
学习永远不晚

react实现动态选择框

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

react实现动态选择框

本文实例为大家分享了react实现动态选择框的具体代码,供大家参考,具体内容如下

小需求

在工作中,我们也会碰到这种需求: 为了提高用户的体验,在搜索的时候,采用灵活查询。用户可以自己选择查询项并且填写对应的值。

这篇博文涉及知识点在这篇博文“react+antd 动态编辑表格数据”中提及过。大家可以先去这篇学习一下然后这里。

示例代码

import React, { Component, useState } from 'react';
import { Button, Col, message, Select, Row, Input } from 'antd'
import { PlusCircleOutlined, MinusCircleOutlined } from '@ant-design/icons';
const { Option } = Select
function Index() {


    // 可选项
    const [choseList, setChoseList] = useState(['商品ID', '款号', '产品线','一级类目','二级类目','三级类目','渠道'])

    // 已存在选
    const [exitChoseList, setExitChostList] = useState([])

    

    const [searchData, setSearchData] = useState([])


    return (
        <div>
            <Row style={{ marginLeft: 50, marginTop: 50, width:'100vw', }}>
                {
                    searchData.map((item, index) => {
                        return <Col span={8} style={{ display: 'flex', marginTop:5 }}>
                            <Select style={{ width: 150 }} value={searchData[index]['sort']} onChange={(value) => {
                                // 判断用户选择的选择项是否已经存在
                                if(exitChoseList.indexOf(value) == -1){
                                    // 用户选择的选择项不存在的时候,判断是否已经有选择项了
                                    if(searchData[index]['sort']!= ''){
                                        // 要是存在选择项的话
                                        let obj = [...exitChoseList]
                                        // 先把之前的选择项删除掉
                                        obj.splice(index, 1)
                                        // 添加新的选择项
                                        obj.push(value)
                                        setExitChostList(obj)
                                        let searchDataObj = [...searchData]
                                        setSearchData([])
                                        // 然后将其他的值都配置初始化
                                        searchDataObj[index]['value'] = []
                                        searchDataObj[index]['sort'] = value
                                        searchDataObj[index]['value_chose_list'] = [1,2,3]
                                        setSearchData(searchDataObj)
                                    }else{
                                        // 不存在选择项的话
                                        let obj = [...exitChoseList]
                                        setExitChostList([])
                                        // 添加选择项
                                        obj.push(value)
                                        setExitChostList(obj)
                                        let searchDataObj = [...searchData]
                                        setSearchData([])
                                        searchDataObj[index]['sort'] = value
                                        searchDataObj[index]['value_chose_list'] = [1,2,3]
                                        setSearchData(searchDataObj)
                                    }
                                }else{
                                    message.warn('已存在这个选择项了')
                                }
                               
                            }}>
                                {
                                    item.chose_list.map(i => {
                                        return <Option value={i}>{i}</Option>
                                    })
                                }
                            </Select>
                            {
                                searchData[index]['sort'] == '商品ID' || '款号' ? <Input style={{ width: 200 }} value={searchData[index]['value']} onChange={(e) => {
                                    let obj = [...searchData]
                                    obj[index]['value'] = e.target.value
                                    setSearchData(obj)
                                }} />
                                    : <Select value={searchData[index]['value']} style={{ width: 200 }} mode="multiple" onChange={(value) => {
                                        let obj = [...searchData]
                                        obj[index]['value'] = value
                                        setSearchData(obj)
                                    }}>
                                        {
                                            item.value_chose_list.map(i => {
                                                return <Option value={i}>{i}</Option>
                                            })
                                        }
                                    </Select>
                            }
                            <MinusCircleOutlined style={{marginTop:5, marginLeft:10, marginRight:10}} onClick={()=>{
                                if(searchData[index]['sort'] != ''){
                                    let value = searchData[index]['sort']
                                    let exitChoseObj = [...exitChoseList]
                                    setExitChostList([])
                                    exitChoseObj.pop(value)
                                    setExitChostList(exitChoseObj)
                                    let obj = [...searchData]
                                    obj.splice(index, 1);
                                    setSearchData(obj)
                                }
                            }} />
                        </Col>
                    })
                }
                <PlusCircleOutlined style={{ marginLeft: 20, marginTop:10 }} onClick={() => {
                    let obj = [...searchData]
                    setSearchData([])
                    let arr3 = choseList.filter(items => exitChoseList.indexOf(items) == -1);
                    obj.push({
                        'sort': '',
                        'value': [],
                        'chose_list': arr3,
                        'value_chose_list':[]
                    })
                    setSearchData(obj);
                }} />

            </Row>
            <div style={{marginTop:20, marginLeft:50, display:'flex'}}>
                <Button type="primary" onClick={()=>{
                    console.log(searchData)
                }}>搜索</Button>
                <Button type="primary" danger onClick={()=>{
                    setSearchData([])
                    setExitChostList([])
                }}>重置</Button>
            </div>
        </div>

    )

}

export default Index

总结

这里就是采用了react中的: […searchData] 这个特性,造的第一个组件。后续还会继续分享自己的造的组件。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

react实现动态选择框

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

react如何实现图片选择

这篇文章主要讲解了“react如何实现图片选择”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“react如何实现图片选择”吧!react实现图片选择的方法:1、使用import引入“react
2023-07-05

react如何实现弹出模态框

这篇文章主要介绍“react如何实现弹出模态框”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“react如何实现弹出模态框”文章能帮助大家解决问题。react实现弹出模态框的方法:1、用createP
2023-07-05

使用Jquery和Ajax的动态依赖选择框

如何使用Jquery,Ajax,PHP和Mysql进行动态相关选择框。当在“父”框中进行选择时,从属选择框允许刷新“子”框列表数据。在这篇文章中,我给出了“catergory”和“subcategory”之间的数据库关系示例。这是非常简单的
2023-06-03

vue选择下拉框动态变化表单方式

这篇文章主要介绍了vue选择下拉框动态变化表单方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2022-11-13

React远程动态组件怎么实现

这篇文章主要介绍了React远程动态组件怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇React远程动态组件怎么实现文章都会有所收获,下面我们一起来看看吧。远程动态组件实现远程动态组件库远程动态组件库项
2023-07-05

React Native中怎么实现动态导入

这篇文章主要介绍“React Native中怎么实现动态导入”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“React Native中怎么实现动态导入”文章能帮助大家解决问题。背景随着业务的发展,每一
2023-07-02

编程热搜

目录