背景:使用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是锁定版本的,一旦插件版本变更,就自动失效,所以更新的时候要确认该问题是否修复。