antd table 編輯單元格

技術(shù)背景: react-hook、antd
優(yōu)勢方案:方案一

一。方案一(可多個單元格一起)

官方有例子
思想: 利用form表單

二。方案二(僅限單個單元格 )

思想: 有點vue的處理方式,利用數(shù)據(jù)標志處理顯隱性,input自己拿值,再foucs事件利用綁定的唯一id

  1. 變量定義
    const [inputVal, setInputVal] = useState('')
    const [source, setSource] = useState([])
    const [tableData, setTableData] = useState([])    
    const [isEdit, setIsEdit] = useState(false) 
    const [eidtRow, setEidtRow] = useState({})
    const [editInputVal, setEditInputVal] = useState('')  
    const editInputRef = useRef(null)
  1. colums渲染
        {
            title: '備注',
            dataIndex: 'remarkName',
            key: 'remarkName',
            align: 'center',
            editable: true,            
            width: 90,
            render: (text, record)=>{

                if(record.isEdit){
                    console.log('id', record)                    
                    return (
                        <Input
                        id= {`input-${record.id}`}
                        value={ editInputVal }
                        style={{ width: 310 }}
                        placeholder="請輸入需要修改的備注"
                        onPressEnter={(e) => handleSubmitRemarkName(e, record)}
                        onBlur={(e) => handleSubmitRemarkName(e, record)}
                        onChange={(e) => handleChangeInputVal(e)}
                        allowClear
                      />
                    )
                }else {
                    return (
                        <div>
                            <span style={{marginRight: 10}}>{ text }</span>
                            <FormOutlined onClick={() => handleEditRemarkName(record)}/>
                        </div>
                    )                    
                }

            }                
        },

3.各函數(shù)處理

    const handleEditRemarkName = (row) =>{     
        console.log('1', 1234668)        
           setEditInputVal(row.remarkName)
           const table = tableData.map(item => {
               if(item.id === row.id){
                   return {
                       ...item,
                       isEdit: true,
                       inputRef: editInputRef
                   }
               }else {
                   return item
               }
           })
           setTableData(table) 
           setEidtRow(row)  
           setIsEdit(true)                           
    }

    const handleSubmitRemarkName = (e, row) =>{
        const table = tableData.map(item => {
            if(item.id === row.id){
                return {
                    ...item,
                    isEdit: false
                }
            }else {
                return item
            }
        })  
        setTableData(table)         
        setIsEdit(false)    

        const inputVal = e.target.value
        const query = {
            phoneNo: row.phoneNo,
            remarkName: inputVal
        }            
        props.addCommonPhone(query)


    }

    const handleChangeInputVal = (e) => {
      console.log('e',e.target.value)
      setEditInputVal(e.target.value)
      
    }
  1. 聚焦事件實現(xiàn)
    useEffect(() => {
        console.log('props.commonSource', props.commonSource)
        setSource(props.commonSource)
        setTableData(filterData(props.commonSource, inputVal))
    }, [props.commonSource])

    useEffect(() =>{

    const inputDom = document.querySelector(`#input-${eidtRow.id}`)      
    if(inputDom){
        inputDom.focus({
            cursor: 'start',
          });
    }

    },[isEdit])
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容