У меня есть функциональный компонент в React, который использует компонент AG-grid, который выглядит примерно так:
import React, { useRef } from 'react'
import { AgGridReact } from 'ag-grid-react'
export default function FormEditor(props) {
.... code for fetching data etc. goes here ...
// create ref to be able to call ag-grid.api on our spreadsheet
const editFormRef = useRef()
// can we log the row data to the console? Yes!
function logData() {
if (!editFormRef.current.api) {
return
}
const rowCount = editFormRef.current.api.getDisplayedRowCount()
for (let i = 0; i < rowCount; i++) {
const rowNode = editFormRef.current.api.getDisplayedRowAtIndex(i)
console.log(`row ${i + 1} -> `, rowNode.data)
// Perform your logic
}
}
// will the data that's changed be highlighted? Maybe, on the second go...
function markCellChanged(params) {
if (!editFormRef.current.api) {
return
}
const row = editFormRef.current.api.getDisplayedRowAtIndex(params.rowIndex)
console.log('markCellChanged() called ')
if (params.oldValue !== params.newValue) {
params.colDef.cellStyle = function(params) {
return { backgroundColor: '#6fcc44', transparency: 0.5 }
}
console.log('Redrawing row ', row)
editFormRef.current.api.redrawRows({ rowNodes: [row] })
}
}
return (
<React.Fragment>
<AgGridReact
ref={editFormRef}
rowSelection="multiple"
columnDefs={columns}
rowData={rows}
rowDragManaged={true}
components={{ editCellEditor: ReviewCellEditor }}
// editType="fullRow"
enableFillHandle={true}
/>
<Button variant="contained" onClick={() => logData()}>
Log Data
</Button>
</React.Fragment>
)
}
Проблема в том, что он работает, но только на втором go. И это также работает, если ячейка в этом столбце уже была отредактирована.
Это не конечная позиция, в которой я хочу находиться, так как я хочу сравнить данные с предоставленными исходными строками, а не только с последнее значение изменилось в ячейке. Я просто подумал, что лучше начинать с малого и строить; -)
Может кто-нибудь объяснить это поведение и сообщить мне, где я иду не так?