<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文範例為大家分享了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([]) /** * searchData的資料結構是: * { * // 選擇項 'sort': '', // 使用者選擇的值,即在多選框中選擇的值 'value': [], // 可選擇項 'chose_list': [], // 使用者選擇一個選擇項之後,這個選擇項對應的所有的選擇。例如: 選擇項為「季節」則春夏秋冬 'value_chose_list':[] } */ 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] 這個特性,造的第一個元件。後續還會繼續分享自己的造的元件。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45