reactjs - ag-Grid:框架组件缺少方法 getValue()

标签 reactjs typescript ag-grid

我有这个列定义:

headerName: "Date of birth",
field: "geburtsdatum",
editable:true,
cellEditorFramework: ChildGeburtstagEditor,
onCellValueChanged: (params: any) => {
    console.log("New param" + params.newValue); //This value is every time null
},
resizable: true,

ChildGeburtstagEditor:

import React, {useState} from 'react';
...

interface State {
    value: string;
}

interface Props {
    value: any;
    getValue: any; //Tried to set getValue here
}

const ChildGeburtstagRenderer: React.FC<Props> = (props) => {
    const [state, setState] = useState<State>({
        value: "2019-08-08",
    });

    function getValue(): string { //THIS FUNCTION CANT BE FOUND?!?!?
        return "Test";
    }

    return (
        <>
            ... some code...
        </>
    );
}

//EDIT: IF I add this line here I get ChildGeburtstagRenderer undefined
ChildGeburtstagRenderer.prototype.getValue = () => "Text";
    export default ChildGeburtstagRenderer;

每次当我离开编辑器(点击离开)时,返回值每次都是 null 并且我收到 ag-grid 消息:

“ag-Grid:框架组件缺少方法 getValue()”

如何告诉 ag-grid 我在代码中有函数 getValue?

//解决方案 我正在使用带有 typescript 的功能组件。这对我有用

interface State {
    value: string;
}

interface Props {
    value: any;
}

const ChildGeburtstagEditor: React.FC<Props> = (props, ref) => {
    const [state, setState] = useState<State>({
        value: props.value,
    });

    useImperativeHandle(ref, () => {
        return {
            getValue: () => {
                return state.value;
            }
        };
    });

    return (
        <>
            <TextField
                id="standard-name"
                label="Name"
                className={classes.textField}
                value={state.value}
                onChange={(evt) => {setState({...state, value: evt.target.value})}}
                margin="normal"
              />
        </>
    );
};
export default forwardRef(ChildGeburtstagEditor);

最佳答案

ag-Grid(和 ag-grid-react)的下一个版本将提供在 ag-Grid 中使用 hooks 的完整支持和文档,但现在你需要知道的是你需要用 forwardRef 并使用 useImperativeHandle 公开预期的生命周期方法(如 getValue)。

export default forwardRef((props, ref) => {
    const inputRef = useRef();
    useImperativeHandle(ref, () => {
        return {
            getValue: () => {
                return inputRef.current.value;
            }
        };
    });
    return <input type="text" ref={inputRef} defaultValue={props.value}/>;
})

这对单元格渲染器和单元格编辑器来说工作正常,但对过滤器等的支持将仅在下一版本 (22.0.0) 中可用。

关于reactjs - ag-Grid:框架组件缺少方法 getValue(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58062993/

相关文章:

javascript - 使用 Multer 将图像保存在 MongoDB 后端作为来自 Angular 的文件,它无法正常工作

ag-grid - 从农业网格中的回调更新单元格值

ag-grid - 添加具有无限行模型的行

javascript - 类型错误 : Cannot read property “0” from undefined

reactjs - 准备要在 npm 上发布的 React 组件

javascript - 如何使用 id React Js 和 Firebase 显示数据

javascript - typescript |扩展错误(未捕获的类型错误 : this is not a X object)

javascript - 使用 React-navigation 进行 React Native 时组件会重新渲染

unit-testing - 相当于 "Package-Protected"用于 Typescript 测试?

javascript - AgGrid 自定义时间过滤器