К сожалению, я не могу поделиться кодом, потому что это конфиденциально для компании, но я в основном использую colDefs для определения своих столбцов в аг-сетке React и хотел бы иметь один столбец, все ячейки которого являются настраиваемым компонентом кнопки JSX, который я создал, что позволит мне удалить строка ячейки, по которой щелкнули, а также распространить изменения в другом месте кода. Я застрял, пытаясь использовать cellRenderers, и просто не могу понять, как добавить настраиваемые функциональные компоненты реакции в ячейку. Если кто-то может помочь с этим, мы будем очень признательны. Я постараюсь предоставить как можно больше дополнительного контекста, но, к сожалению, не могу поделиться фрагментами прямого кода. Спасибо!
Как разместить компонент React jsx в ячейках ag-grid
Ответы (1)
Вы можете увидеть пример в документации ag-grid здесь. Я также установил песочницу в в котором вы можете удалять строки из сетки, нажимая каждую соответствующую кнопку.
В основном вам необходимо:
Создайте собственное средство визуализации, которое будет отображаться в ячейках столбца, например DeleteCellRenderer. Вам нужно будет получить доступ как минимум к двум реквизитам:
props.context
, the grid's context which will contain the method(s) to fire in theonClick
methodprops.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" }, //... ];
Или, если вы используете
<AgGridColumn>
компонентов в качестве дочерних:<AgGridReact //... > <AgGridColumn headerName="Delete" cellRenderer="deleteCellRenderer" /> //... </AgGridReact>