Antd樹形表格Table tree子節(jié)點(diǎn)動(dòng)態(tài)異步獲取

需求:由于后端一次性返回樹形數(shù)據(jù)太過龐大,現(xiàn)需要做到table tree樹形表格點(diǎn)擊展開再動(dòng)態(tài)獲取子節(jié)點(diǎn)


image.png

Antd是一個(gè)強(qiáng)大的組件庫,table tree幫我們提供了一個(gè)點(diǎn)擊展開按鈕的方法onExpand


image.png

根據(jù)onExpand第二個(gè)參數(shù)record我們可以得到當(dāng)前要展開的節(jié)點(diǎn),根據(jù)當(dāng)前節(jié)點(diǎn)獲取子節(jié)點(diǎn),再插入表格數(shù)據(jù)中,重新渲染表格
<Table
    rowKey='id'
    dataSource={data}
    onExpand={this.handldOnExpand}
    columns={[
      { title: 'Name', dataIndex: 'name' },
      { title: 'Age', dataIndex: 'age' },
      { title: 'Address', dataIndex: 'address' }
    ]}
  />

找到當(dāng)前要展開的節(jié)點(diǎn)(用find方法),插入children節(jié)點(diǎn)

handldOnExpand = (expanded, record) => {
  const id = record.id
  const data = this.state.data

  const dataMap = (items) => {
    items.find((item) => {
      if (item.id === id) {
        //找到當(dāng)前要展開的節(jié)點(diǎn)
        item.children = [{name: 'aoli', age: '12', address: '深圳'}]
        return items
      }
      if (item.children && item.children.length > 0) {
        dataMap(item.children)
      }
    })
  }
  dataMap(data || [])
  //重新渲染表格
  this.setState({
    data
  })
}

handldOnExpand完整處理代碼

handldOnExpand = (expanded, record) => {
  if(!expanded)  return  //如果是關(guān)閉就返回
  if(record.children && record.children.length > 0)  return  //如果已經(jīng)有數(shù)據(jù)就返回
  const id = record.id
  const data = this.state.data

  //發(fā)送請求,該請求我已經(jīng)自行封裝過,不可照搬。請根據(jù)自己項(xiàng)目發(fā)送請求的方法發(fā)送請求
  this.props.request({
      fetch:'你的url',
      params:{id: id},
      success: (res) => {
        //獲取到的子節(jié)點(diǎn)       
        const children = res.data || []
        const dataMap = (items) => {
          items.find((item) => {
            if (item.id === id) {
              //找到當(dāng)前要展開的節(jié)點(diǎn)
              item.children = children
              return items
            }
            if (item.children && item.children.length > 0) {
              dataMap(item.children)
            }
          })
        }
        dataMap(data || [])
      
        this.setState({
          data
        })
      }
    })
  
}

tips: 簡書上交流可能會(huì)看不到消息,如有問題,歡迎進(jìn)群交流50063010

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

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

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