0

我正在尝试使用 editRef ( const editRef = useRef(); )访问 EditControl 功能,以便以编程方式访问其处理程序。不幸的是,Web 开发工具中出现以下警告:“无法为函数组件提供引用。尝试访问此引用将失败。您是要使用 React.forwardRef() 吗?”。

因此,当我尝试访问它时,我得到了不确定。

这是一个常见的警告,可以通过 forwardRef 包装解决,但在这种情况下,我不知道如何解决它,因为我无法访问 EditControl 代码来添加引用。

是否有任何解决方法可以让我访问 EditControl 组件的对象?

<FeatureGroup>
      <EditControl
        ref={editRef}
        onDrawVertex={checkOverlapping}
        position='topright'
        onCreated={pushPolyToArr}
        draw={{
          rectangle: false,
          polyline: false,
          circle: false,
          marker: false,
          circlemarker: false
      />
    </FeatureGroup>
4

1 回答 1

0
...
let rectangleRef = useRef();

useEffect(() => {
    if (!rectangleRef.current || !isActiveSearchByArea) {
        return;
    }
    rectangleRef.current._toolbars.draw._modes.rectangle.handler.enable();
}, [rectangleRef, isActiveSearchByArea]);


const onMountedRect = (e) => {
    rectangleRef.current = e;
};

return (
    <FeatureGroup>
        <EditControl
            onMounted={onMountedRect}
            position='topright'
            draw={{
                rectangle: false,
                polyline: false,
                circle: false,
                circlemarker: false,
                marker: false,
                polygon: false
            }}
            edit={{
                edit: false,
                remove: false
            }}
        />
    </FeatureGroup>
);
于 2022-01-19T22:03:55.027 回答