Ag-grid:如何使传递到cellRenderers的外部数据保持新鲜

问题描述

因此,我要实现的功能类似于在使用ag-grid内置单元格编辑功能(其中行中的所有单元格都可编辑)时editType: "fullRow"功能的工作方式。

我为此使用自定义cellRenderer而不是cellEditor组件的原因是,当编辑一行然后单击另一行时,我无法阻止cellFocus,这将导致编辑停止(我不想要的。)

因此,当您单击表每一行中的“编辑”按钮时,该行中的cellRenderers应该更新以显示输入。每当对这些输入中的任何一个进行更改(通过onBlur)时,我都希望将该新值推送到处于我的react状态的数组中,将其称为editedFields(状态位于ag-网格表)。

当前,我正在将editedFields传递到columnDefs,然后通过valueFormatter传递到单元格渲染器中:

 {
  headerName: "Job #",field: "job_number",width: 100,valueFormatter: params => ({
    editing: editRow && selectedRow.id === params.data.id,columnName: "job_number",editedFields,setEditedFields,selectedRow
  }),cellRenderer: "textInputCellRenderer",suppressMenu: true
},

这是我的textInputCellRenderer的样子:

const TextInputCellRenderer = params => {
  const [input,setInput] = useState(params.value || "");

  const {
    editing,columnName,value
  } = params.formatValue();

  if (!editing) {
    return <span>{params.value || value || ""}</span>;
  }
  
  return (
    <input
      value={input}
      className="text-input-cell"
      type="text"
      onBlur={() => setEditedFields([...editedFields,{ [columnName]: input}])}
      onChange={e => {
        setInput(e.target.value);
      }}
    />
  );
};

问题是当我调用onBlur时,它会导致ag-grid崩溃,并显示以下错误TypeError: Cannot read property 'getId' of null at FocusController.onColumnEverythingChanged

每当进行编辑(每次更改setColumnDefs时,为了获得每个{{1}中最新的editedFields内容添加editedFields调用中,就会开始发生这种情况}位于我们要更新的行中。在此之前,我将对单元格进行更改,并且textInputCellRenderer将正确填充,但是如果我也对另一个单元格进行了更改,则该cellRenderer中的editedFields将为空。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)