首页 > 其他分享 >表头与行的联动及数据处理

表头与行的联动及数据处理

时间:2022-09-19 10:02:44浏览次数:64  
标签:与行 selectedReason 表头 item reason value 数据处理 const inputedReason

 

 下拉框组件

两个功能:(1)可以接收父组件的值(2)修改的时候可以把值传给父组件

特殊:有自定义的功能

 

 

<Select value={selectedValue} onChange={(value) => {   setSelectedValue(value)   onChange({     selectedReason: value,     inputedReason: inputedReason   }) }} placeholder="Select One" style={{ width: '100%' }}>   // 从接口获取数据的选项   {reasonOptions.map((item) => (     <Select.Option key={item.value} value={item.value}>       {item.label}     </Select.Option>   ))}   // 自定义的选项   <Select.Option value="">Other (specify reason)</Select.Option> </Select> {selectedValue === '' && (   <Input.TextArea     value={inputedValue}     onChange={(e) => {       setInputedValue(e.target.value)       onChange({         inputedReason: e.target.value,         selectedReason: selectedReason       })     }}     placeholder="Enter Reason"       rows={3}     style={{marginTop: '12px',}} /> )}

父组件传入三个参数 (1)selectedReason 选择 (2)inputedReason 输入 (3)onChange事件

需要区别对待,设有inputValue和selectValue

const [selectedValue, setSelectedValue] = useState<string>() const [inputedValue, setInputedValue] = useState<string>()

// 接收selectReason

useEffect(() => {   selectedReason && setSelectedValue(selectedReason) }, [selectedReason]) // 接受inputReason
useEffect(() => {   if (inputedReason) {     setSelectedValue('')     setInputedValue(inputedReason)   }else{     setInputedValue('')   } }, [inputedReason]) 完整代码 const ReasonSet: React.FC<Props> = ({ selectedReason, inputedReason, onChange }) => { const [selectedValue, setSelectedValue] = useState<string>() const [inputedValue, setInputedValue] = useState<string>() const [reasonOptions, setReasonOptions] = useState<SelectOptionType[]>([]) useEffect(() => { // setOptionsFromApi下拉框组件,抽时间整理 setOptionsFromApi(getQueryCloseReasonList, setReasonOptions, {   label: 'name',   value: 'qcr_guid',   }) }, [])
useEffect(() => {   selectedReason && setSelectedValue(selectedReason) }, [selectedReason])
useEffect(() => {   if (inputedReason) {     setSelectedValue('')     setInputedValue(inputedReason)   } else {     setInputedValue('')   } }, [inputedReason])
return ( <> <Select value={selectedValue} onChange={(value) => {   setSelectedValue(value)   onChange({     selectedReason: value,     inputedReason: inputedReason,   }) }} placeholder="Select One" style={{ width: '100%' }} > {reasonOptions.map((item) => ( <Select.Option key={item.value} value={item.value}>   {item.label} </Select.Option> ))} <Select.Option value="">Other (specify reason)</Select.Option> </Select>
{selectedValue === '' && ( <Input.TextArea   value={inputedValue}   onChange={(e) => {     setInputedValue(e.target.value)       onChange({     i  nputedReason: e.target.value,       selectedReason: selectedReason,     })   }}   placeholder="Enter Reason"   rows={3}   style={{     marginTop: '12px',   }} /> )} </> ) } 父组件 调用 // 表头 <Modal title="Reason For Closing" visible={reasonModalVisible} okText="Continue" onCancel={() => setReasonModalVisible(false)} onOk={handleReason}>   <ReasonSet onChange={(reason: any) => handleAllChangeReason(reason)} /> </Modal> // 表格item <Table.Column   title={titleNode}   fixed   width={190}   render={(_: any, record: QueryData) =>     record.close_reason ? (       <span>{record.close_reason}</span>      ) : (       <ReasonSet         inputedReason={record.inputedValue}         selectedReason={record.selectedValue}         onChange={(reason) => handleChangeReason(record.q_guid, record.sfv_guid, reason)}       />      )   } /> // 初始化列表数据 const loadList = () => {   getQueryList({   page_size: pageSize,   page_num: pageNum,   ...getParams(filterData), }).then(({ message: msg, result, status }) => {   if (status !== 200) {     return message.error(msg)   }   setQueryList(     result.data_list.map((item: any) => ({     ...item,     inputedValue: '',     selectedValue: undefined,   })), ) setListCount(result.total_count) }) }   // 批量关闭原因 const handleAllChangeReason = (reason: any) => {   if (reason.selectedReason) {     setAllSelectedReason(reason.selectedReason)     setAllInputedReason('')   } else {     setAllInputedReason(reason.inputedReason)     setAllSelectedReason('')   } } // 批量关闭原因弹窗确认 const handleReason = () => {   // 改变Select选项的方法,对queryList做处理   const copiedQueryList = [...queryList]   copiedQueryList.map((item: any) => {     selectedRowKeys.map((row: any) => {       if (item.q_guid === row) {         item.inputedValue = allInputedReason         item.selectedValue = allSelectedReason     }   }) }) setQueryList(copiedQueryList) setReasonModalVisible(false) } // 单个关闭原因 const handleChangeReason = (queryGuid: string, sfvGuid: string, reason?: { selectedReason?: string; inputedReason?: string }) => {   const copiedQueryList = [...queryList]   copiedQueryList.map((item: any) => {     selectedRowKeys.map((row: any) => {       if (item.q_guid === queryGuid) {       if (reason?.selectedReason) {         item.inputedValue = ''         item.selectedValue = reason?.selectedReason       } else {         item.selectedValue = ''         item.inputedValue = reason?.inputedReason       }     }   }) }) setQueryList(copiedQueryList) } 总结: 数据的改变始终是在初始化数据的基础上进行改变,不论是批量改变还是单个改变,都应该统一改变一个字段(如果初始数据上没有,可以自己添加),如果只考虑改变了哪些数据,有些局限性,比如在这个场景中,在事件中我只能拿到guid和reason,但是后端还需要sfv_guid,我是没有办法拿到的。

标签:与行,selectedReason,表头,item,reason,value,数据处理,const,inputedReason
From: https://www.cnblogs.com/liiann/p/16703325.html

相关文章

  • elementUI-el-table表头固定不滑动
    1.表格总体需要实现滚动效果,但是表头不会随之滚动2.实现方式表格外层盒子高度100%;el-table的高度也为100%,el-table标签中添加height="100%"<divclass="tableD">......
  • Sentinel-3(哨兵3)数据处理
     Sentinel-3(哨兵3)卫星是欧空局(ESA)和欧洲委员会(EC)卫星项目,该卫星搭载OLCI(海陆色度仪)和SLSTR(海陆表面温度辐射计),可提供全球多光谱中等分辨率海洋/陆地观测能力。海洋方面,可......
  • 复杂格式数据处理
    1SELECT2code,3name,4ai.ACode,5ai.AName,6bi.BCode,7bi.BName8FROM(SELECT9get_json_object(t.value,......
  • 饮冰三年-人工智能-Pandas-79-Pandas 数据处理
    上一篇:饮冰三年-人工智能-Pandas-78-Pandas新增、统计、排序 数据准备可参考:饮冰三年-人工智能-Django淘宝拾遗-75-数据准备一、对缺失值处理1.1检测1.2丢弃1.3......
  • JS对后端响应的long类型数据处理精度丢失问题
    1、数据库的数据2、前端拿到的数据前端帮我们进行四舍五入了,这并不是我想要的3、解决办法把后端响应的数据long类型转成string类型,可以使用Stream流的方式或者for循......
  • 八--数据处理的两个基本问题
    (1)处理的数据在什么地方?(2)要处理的数据有多长约定reg表示一个寄存器,sreg表示一个段寄存器reg包括:ax、bx、cx、dx、ah、al、bh、bl、ch、cl、dh、dl、sp、bp、si、disreg......
  • python进阶__struct数据处理详解
    一、此模块可以执行Python值和以Pythonbytes对象表示的C结构之间的转换二、打包解包需要按照特定的方式来打包或者解包.该方式就是格式化字符串,它指定了数据类......
  • 常用数据处理方式,你都会吗?
    数据处理和数据管理是数据录入后紧接着需要做的事情。尤其是当面对大量数据时,数据处理可以帮助我们从大量数据中抽取出有价值的信息,达到提高处理效率及精度的目的。为配合......
  • Joinery——Java的数据处理库
    资源https://joinery.sh/v1.10/api/reference/joinery/DataFrame.htmlhttps://github.com/cardillo/joinery使用maven集成到java项目中<dependency><groupId>sh.jo......
  • 将包含三元组数据表 转为以某一维度的特征数据为列表头的csv - 数据转格式化处理
    ###############################统计特征SB下XX数据有几个,并保存#适用于#featureAfeatureBfeatureC#SDF345TA#SDF976T......