【问题标题】:AG grid react framwork component cell render doesn't updae propsAG grid react框架组件单元格渲染器不更新props
【发布时间】:2021-04-18 11:24:47
【问题描述】:

我正在使用AgGridReact 构建一个反应功能组件:

const DataGrid = (props) =>
{                                                                           
   const [gridRowData, setGridRowData] = useState([]);
   const [columnDefinition, setColumnDefinition] = useState([]);

useEffect(async () =>
    {
      if(props.name && props.name !== "")
      {
        ... get grid row data and column definition here according to props.name - working fine
      }
    },[props.name]);

let frameworkComponents = {
  customLoadingOverlay: LoadingOverlayTemplate,
      customNoRowsOverlay: UxDataGridCustomNoRows,
      editButton: params => <ViewAndDeleteSetting {...params}  
          openAddConfigurationsWindow={openAddConfigurationsWindow}
          onDeleteSetting={onDeleteSetting} />
};
.
.
.
const onDeleteSetting = async () =>
{
  console.log("ON DELETE AND NAME IS: " + props.name ); //PRINTS AN EMPTY STRING
   ...
}

return (
  <AgGridReact
            columnDefs={columnDefinition} 
            rowData={gridRowData} 
            frameworkComponents={frameworkComponents}/>
);

正如您在onDeleteSetting 的评论中看到的,调用此回调时名称为空。单元格本身的渲染很好,ViewAndDeleteSetting 确实被渲染了,只是它似乎只被渲染一次,而不是每次名称更改时。如何使用最新的frameworkComponents 重新呈现内部ViewAndDeleteSetting 组件?

【问题讨论】:

  • 你的 onDeleteSetting 函数读取了 agGrid 组件的 props,所以如果你不使用新的 props 刷新整个组件,名称打印将是相同的。我不明白为什么您认为名称会更改,但也许可以尝试从 ViewAndDeleteSetting 组件向 onDeleteSetting 方法添加参数。

标签: reactjs ag-grid ag-grid-react


【解决方案1】:

问题在于我如何尝试将道具传递给ViewAndDeleteSetting。如果您想将 prop 传递给单元格渲染组件,则不应在 frameworkComponents 中执行此操作,而是需要在列定义中执行此操作,如下所示:

useEffect(() =>
{
  let columns = [{headerName: '', cellRenderer: 'editButton', width: 90, editable: false, 
                  cellRendererParams: {
                    openAddConfigurationsWindow: openAddConfigurationsWindow,
                    onDeleteSetting: onDeleteSetting
                }},
                .. other columns
                ]

  setColumnDefinition(columns);
},[props.name]);

当名称更改时,cellRendererParams 的列会在 useEffect 中重新创建,然后组件可以通过其 props 定期访问此参数

【讨论】:

  • 您使用的是什么版本的 ag-grid?
  • @dsh 今天刚刚安装 - 24.1.0
  • 我不认为将 props 传递给 frameworkComponent 本质上是不可能的。问题是参考已过时且未更新。我认为您应该能够使用诸如getFrameworkComponents(props) 之类的getter 来解决此问题,该getter 将在每次渲染时动态计算。但是您的解决方案实现了相同的目标。
  • 即使我使用 useMemo ,它基本上实现了你建议的 memoized getter,它也不起作用
猜你喜欢
  • 1970-01-01
  • 2018-09-22
  • 2018-08-10
  • 2019-01-13
  • 2018-02-13
  • 2020-03-11
  • 2017-06-11
  • 2018-09-30
  • 2020-02-21
相关资源
最近更新 更多