亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在數據更改時無法讓自定義單元格渲染器進行更新。函數組件的行為與類組件的行為不同

在數據更改時無法讓自定義單元格渲染器進行更新。函數組件的行為與類組件的行為不同

繁花不似錦 2022-08-18 10:51:04
我在整個反應應用程序中使用AG-Grid,在一些情況下,我希望cellRenderer在網格數據更改時進行更新。在以下兩種情況下,cellRenderer 最初都會正確加載,但在數據更改時不會更新:用戶編輯可編輯的單元格并更改該值。服務器以 redux 格式更新網格數據查看此代碼和框在此示例中,我使用可編輯的單元格重新創建了第一個用例,并使用了類組件和函數組件。使用onCellValueChanged和params.api.refreshCells(),我能夠更新類組件,但不能更新函數組件。第一個問題:我如何讓 react 函數組件使用新的 props 重新渲染,就像類組件在 codesandbox 示例中重新渲染一樣?第二個問題:有沒有更好的方法來更新cellRenderer,而無需在數據更新時取消掛載并重新掛載列中的每個單元?提前感謝您的幫助和指導!
查看完整描述

1 回答

?
蠱毒傳說

TA貢獻1895條經驗 獲得超3個贊

1.小區渲染器功能


當您沒有刷新要求時,應使用單元格呈現器函數,這在 ag-grid 文檔中有所提及。


根據文檔-


如果您沒有刷新或清理要求(即不需要實現刷新或銷毀函數),請使用單元格渲染器的函數變體。


這就是單元格渲染器函數不刷新的原因。


要解決您的問題,您可以這樣做 -


      onCellValueChanged={function(params) {

        if(params.column.getId() === 'country') {

          params.api.redrawRows();

        }

      }}

2.單元格渲染器組件


您工作的原因是因為網格為您處理,因為您尚未在組件中實現。GridCellClassapi.refreshCells()refresh()refresh()GridCellClass


這意味著,如果基礎數據發生更改,您的組件將被銷毀并重新創建。


3.刷新細胞


另請注意,使用不會按原樣工作,因為ag-grid使用更改檢測來刷新單元格,同時確定要刷新的單元格,并且因為實際上其他2列的值不會更改,但實際上它們在cellRenderer本身中已更改。api.refreshCells()


但是,以下方法有效,因為您可以通過傳遞來禁用更改檢測。GridCellClassforce:true


       params.api.refreshCells({

          force: true

        });

來自文檔-


更改檢測將僅用于刷新顯示單元格值與實際值不同步的單元格。如果將 cellRenderer 與刷新方法一起使用,則將調用刷新方法。


查看完整回答
反對 回復 2022-08-18
  • 1 回答
  • 0 關注
  • 120 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號