Unable to find node on an unmounted component.

背景:使用react-sortable-tree 在升级react 17.0.1是报错,错误信息:

react-dom.development.js:24281 Uncaught Error: Unable to find node on an unmounted component.
    at findHostInstanceWithWarning (react-dom.development.js:24281)
    at findDOMNode (react-dom.development.js:24804)
    at ScrollingComponent.componentDidMount (index.js:181)
    at commitLifeCycles (react-dom.development.js:20663)
    at commitLayoutEffects (react-dom.development.js:23426)
    at HTMLUnknownElement.callCallback (react-dom.development.js:3945)
    at Object.invokeGuardedCallbackDev (react-dom.development.js:3994)
    at invokeGuardedCallback (react-dom.development.js:4056)
    at commitRootImpl (react-dom.development.js:23151)
    at unstable_runWithPriority (scheduler.development.js:646)
    at runWithPriority$1 (react-dom.development.js:11276)
    at commitRoot (react-dom.development.js:22990)
    at performSyncWorkOnRoot (react-dom.development.js:22329)
    at react-dom.development.js:11327
    at unstable_runWithPriority (scheduler.development.js:646)
    at runWithPriority$1 (react-dom.development.js:11276)
    at flushSyncCallbackQueueImpl (react-dom.development.js:11322)
    at flushSyncCallbackQueue (react-dom.development.js:11309)
    at scheduleUpdateOnFiber (react-dom.development.js:21893)
    at Object.enqueueSetState (react-dom.development.js:12467)
    at InnerLoadable.push../node_modules/react/cjs/react.development.js.Component.setState (react.development.js:365)
    at InnerLoadable.safeSetState (loadable.esm.js:217)
    at loadable.esm.js:299

根据react-sortable-tree Issuse中#821提供的解决方案(patch-package打补丁)尝试解决。

步骤:

1、安装  npm i patch-package --save-dev

2、修改代码。react-sortable-tree的依赖包node_modules/frontend-collective-react-dnd-scrollzone/lib/index.js

// this.container = (0, _reactDom.findDOMNode)(this.wrappedInstance.current);
// 修改为
this.container = this.wrappedInstance.current;

3、生成补丁 npx patch-package frontend-collective-react-dnd-scrollzone

此时根目录会生成patches目录和frontend-collective-react-dnd-scrollzone+1.0.2.patch文件(内容和git提交比对文件差不多)

diff --git a/node_modules/frontend-collective-react-dnd-scrollzone/lib/index.js b/node_modules/frontend-collective-react-dnd-scrollzone/lib/index.js
index f1f66d6..e33f041 100644
--- a/node_modules/frontend-collective-react-dnd-scrollzone/lib/index.js
+++ b/node_modules/frontend-collective-react-dnd-scrollzone/lib/index.js
@@ -178,8 +178,10 @@ function createScrollingComponent(WrappedComponent) {
         var _this2 = this;
 
         // eslint-disable-next-line react/no-find-dom-node
-        this.container = (0, _reactDom.findDOMNode)(this.wrappedInstance.current);
-
+        //Begin modfiy by pgli for 版本差异
+        // this.container = (0, _reactDom.findDOMNode)(this.wrappedInstance.current);
+        this.container = this.wrappedInstance.current;
+        //End modfiy by pgli for 版本差异
         if (this.container && typeof this.container.addEventListener === 'function') {
           this.container.addEventListener('dragover', this.handleEvent);
         } // touchmove events don't seem to work across siblings, so we unfortunately

4、集成项目中。

在package.json中scripts中添加"postinstall": "patch-package"。

 "scripts": {
+  "postinstall": "patch-package"
 }

5、注意 patch-package是锁定版本的,一旦插件版本变更,就自动失效,所以更新的时候要确认该问题是否修复。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值