reactjs 当用户在AG-Grid表的可编辑字段中输入时,绑定到AG-Grid React的数组未更新

db2dz4w8  于 2023-02-22  发布在  React
关注(0)|答案(1)|浏览(148)

我正在使用AG-Grid react,并将一个数组绑定到AG-Grid的行。有一个名为“comments”的列接受用户输入。默认值为空。在我向该字段输入一些数据后,绑定到AG Grid的数组不会更新。注解仍然是空的。2我正试图把这个数组和用户新输入的注解一起发送到后端。3我该怎么做呢?

import React, {useEffect, useState} from "react";
import {getData} from '../service';

const MainPage = ({data})=>{

    const [rowData,setRowData] = useState([]);
    const [columnDefs,setColDefs] = useState([]);

    const prepareCol = ()=>{
        fields = [];
        fields.push({
            field: "ID"
        });

        fields.push({
            headerName: 'comments',
            editable: true,
            valueSetter: params=>{
                if(params.data['comments']!==params.newValue){
                    // assigning new value
                    params.data['comments'] = params.newValue;
                }
                return true;

            },
            valueGetter: params=>{
                return params.data.comments;
            }
        });
        return fields;
    }

    
    useEffect(()=>{
        getData().then(res=>{
            setRowData(res['rowData']);
            setColDefs(prepareCol);
            
        })
    },[])

    return(
    <>
        <div style={{height: 100, width: '100%'}}>
            <AgGridReact>
                rowData={rowData}
                columnDefs={columnDefs}
            </AgGridReact>
        </div>
       
    </>
    )
}

export default MainPage;
jk9hmnmh

jk9hmnmh1#

我不认为您需要valueGetter和valueSetter来完成此操作,只需添加editable: true即可。
我还在你的代码中发现了一些错误。AgGridReact组件应该为你的case使用一个自结束标记。所以我做了一些修改。这应该可以工作

const [rowData, setRowData] = useState([{ id: 1 }, { id: 2 }, { id: 3 }]);
  const [columnDefs, setColDefs] = useState([
    { field: "ID" },
    {
      field: "comments",
      editable: true,
    },
  ]);
  const gridRef = useRef(null);

  useEffect(() => {
    getData().then((res) => {
      setRowData(res["rowData"]);
    });
  }, []);

  const getAllData = () => {
    gridRef.current.api.forEachNode((node) => {
      // Put your logic here
      console.log(node);
    });
  };

  return (
    <>
      <div className="ag-theme-alpine" style={{ height: 500, width: 500 }}>
        <AgGridReact
          ref={gridRef}
          rowData={rowData}
          columnDefs={columnDefs}
          onCellValueChanged={(params) => console.log(params)} // You can see the changed value
        />
      </div>
    </>
  );

相关问题