如何在我的 ag-grid 单元格中放置一个 react jsx 组件

Posted

技术标签:

【中文标题】如何在我的 ag-grid 单元格中放置一个 react jsx 组件【英文标题】:How do I put a react jsx component within my ag-grid cells 【发布时间】:2021-04-07 07:28:24 【问题描述】:

不幸的是,我不能共享代码,因为它是公司机密,但我基本上使用 colDefs 在 React ag-grid 中定义我的列,并且希望有一列的单元格都是我构建的自定义 JSX 按钮组件,这将允许我删除单击的单元格的行以及在代码中的其他地方传播更改。我一直在尝试使用 cellRenderers 并且根本无法弄清楚如何将自定义反应功能组件添加到单元格中。如果有人可以提供帮助,将不胜感激。我将尝试根据需要提供尽可能多的额外上下文,但不幸的是无法共享直接代码 sn-ps。谢谢!

【问题讨论】:

【参考方案1】:

您可以在 ag-grid 的文档 here 中查看示例。我还发布了sandbox,您可以在其中通过单击各个按钮从网格中删除行。

基本上你必须:

    创建将出现在列的单元格中的自定义渲染器,例如 DeleteCellRenderer。您必须访问至少 2 个道具:

    props.context,网格的上下文,将包含在 onClick 方法中触发的方法 props.data,其中包含该行的数据 - rowData 数组中的特定项。

    打开渲染<AgGridReact />组件的组件并导入渲染器。

    在网格的frameworkComponents 属性中声明渲染器,如下所示:

    <AgGridReact
      frameworkComponents=
        deleteCellRenderer: DeleteCellRenderer
      
      // ...
    

    声明您的删除函数在单击按钮时触发,然后将其传递给网格的上下文。

    const handleDelete = (data) => 
      // Your logic here
    ;
    
    // ...
    
    <AgGridReact
       frameworkComponents=
         deleteCellRenderer: DeleteCellRenderer
       
       context= handleDelete 
       //...
    

    最后,在 colDef 数组中插入包含 cellRenderer 的列,如下所示:

    const colDef = [
    //...
    
      headerName: "delete"
      cellRenderer: "deleteCellRenderer"
    ,
    //...
    ];
    

    或者,如果您将 &lt;AgGridColumn&gt; 组件用作子组件:

    <AgGridReact
    //...
    >
      <AgGridColumn headerName="Delete" cellRenderer="deleteCellRenderer" />
      //...
    </AgGridReact>
    

【讨论】:

也许你也知道如何回答这个问题:***.com/questions/65518883/…

以上是关于如何在我的 ag-grid 单元格中放置一个 react jsx 组件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 JavaScript 在单元格中放置另一个文本?

如何在同一个xib中放置自定义单元格和表格视图?

如何在表格单元格中放置文本框

用 tinymce 编辑器替换单元格的 ag-grid 编辑器

如何验证 ag-grid 单元格的数据?

如何在#ag-grid for React 中执行单元格验证