findDOMNode 在 StrictMode 中已弃用。 findDOMNode 被传递了一个 DraggableCore 的实例,该实例位于 StrictMode 内

Posted

技术标签:

【中文标题】findDOMNode 在 StrictMode 中已弃用。 findDOMNode 被传递了一个 DraggableCore 的实例,该实例位于 StrictMode 内【英文标题】:findDOMNode is deprecated in StrictMode. findDOMNode was passed an instance of DraggableCore which is inside StrictMode 【发布时间】:2020-12-15 14:58:28 【问题描述】:

可拖动包在严格模式下导致错误:

警告:findDOMNode 在 StrictMode 中已弃用。 findDOMNode 是 传递了一个 DraggableCore 实例,该实例位于 StrictMode 内部。 相反,直接将 ref 添加到要引用的元素。 在此处了解有关安全使用 refs 的更多信息: https://reactjs.org/docs/strict-mode.html#warning-about-deprecated-finddomnode-usage

显然他们从未修复它https://github.com/STRML/react-draggable/issues/440,你有什么好的/优雅的解决方案吗?

【问题讨论】:

【参考方案1】:

根据https://github.com/STRML/react-draggable/blob/v4.4.2/lib/DraggableCore.js#L159-L171上的官方git存储库

/* If running in React Strict mode, ReactDOM.findDOMNode() is deprecated.
* Unfortunately, in order for <Draggable> to work properly, we need raw access
* to the underlying DOM node. If you want to avoid the warning, pass a `nodeRef`
* as in this example:
*/

function MyComponent() 
    const nodeRef = React.useRef(null);
    return (
        <Draggable nodeRef=nodeRef>
            <div ref=nodeRef>Example Target</div>
        </Draggable>
    );


/*
* This can be used for arbitrarily nested components, so long as the ref ends up
* pointing to the actual child DOM node and not a custom component.
*/

有效!

【讨论】:

感谢您跟进您自己的问题,这对我有帮助!

以上是关于findDOMNode 在 StrictMode 中已弃用。 findDOMNode 被传递了一个 DraggableCore 的实例,该实例位于 StrictMode 内的主要内容,如果未能解决你的问题,请参考以下文章

使用 React,在使用 react-transition-group 时,在 StrictMode 中不推荐使用 findDOMNode 作为警告

带有 CSSTransition 组件的 findDOMNode 警告

无法在材质 UI TextField 中键入文本

在 TypeScript 中使用 React.findDOMNode

React:映射 ReactDOM.findDOMNode(this) 的子节点

android.os.NetworkOnMainThreadException 在 android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(St