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

问题描述 投票:0回答:2

我有这个专栏定义:

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,

ChildGeburtstag编辑器:

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 函数?

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

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);
reactjs typescript ag-grid
2个回答
4
投票

ag-Grid(和 ag-grid-react)的下一个版本将提供在 ag-Grid 中使用钩子的完整支持和文档,但现在您需要知道的是您需要用

forwardRef
包装您的钩子并使用
getValue
公开预期的生命周期方法(如
useImperativeHandle
)。

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)中提供。


0
投票

纪元 2024 这仍然没有修复。我发现你也可以使用这个:

this.filterParams.valueGetter(params)
而不是
this.filterParams.getValue(params.node)

这是遵循文档中提供的示例

© www.soinside.com 2019 - 2024. All rights reserved.