简体   繁体   English

如何找出哪个 package 正在使用 UNSAFE componentWillMount 方法?

[英]How to find out which package is using the UNSAFE componentWillMount method?

Since yesterday (I think) I've started to get this Warning from React:从昨天开始(我想)我已经开始从 React 收到这个警告:

Warning: componentWillMount has been renamed, and is not recommended for use. 
See https://reactjs.org/blog/2018/03/27/update-on-async-rendering.html for details.

* Move code with side effects to componentDidMount, and set initial state in the constructor.
* Rename componentWillMount to UNSAFE_componentWillMount to suppress this warning in non-strict mode. 
In React 17.x, only the UNSAFE_ name will work. 
To rename all deprecated lifecycles to their new names, you can run `npx react-codemod rename-unsafe-lifecycles` 
in your project source folder.

Please update the following components: SideEffect(NullComponent)

I know what this is about.我知道这是怎么回事。 And I don't use this lifecycle method in my code.而且我没有在我的代码中使用这种生命周期方法。 Actually I'm working only with React Hooks and my only class component is an ErrorBoundary .实际上我只使用 React Hooks 并且我唯一的 class 组件是ErrorBoundary

The error also logs this:该错误还记录了这一点:

Please update the following components: SideEffect(NullComponent)

r @ backend.js:6
printWarning @ react-dom.development.js:12339
lowPriorityWarningWithoutStack @ react-dom.development.js:12360
push.fxOa.ReactStrictModeWarnings.flushPendingUnsafeLifecycleWarnings @ react-dom.development.js:12524
flushRenderPhaseStrictModeWarningsInDEV @ react-dom.development.js:25646
commitRootImpl @ react-dom.development.js:24894
unstable_runWithPriority @ scheduler.development.js:818
runWithPriority$2 @ react-dom.development.js:12131
commitRoot @ react-dom.development.js:24888
finishSyncRender @ react-dom.development.js:24295
performSyncWorkOnRoot @ react-dom.development.js:24273
(anonymous) @ react-dom.development.js:12181
unstable_runWithPriority @ scheduler.development.js:818
runWithPriority$2 @ react-dom.development.js:12131
flushSyncCallbackQueueImpl @ react-dom.development.js:12176
flushSyncCallbackQueue @ react-dom.development.js:12164
scheduleUpdateOnFiber @ react-dom.development.js:23675
dispatchAction @ react-dom.development.js:17056
getAllBlog$ @ App.js:142
tryCatch @ runtime.js:45
invoke @ runtime.js:271
prototype.<computed> @ runtime.js:97
tryCatch @ runtime.js:45
invoke @ runtime.js:135
(anonymous) @ runtime.js:145
Promise.then (async)
invoke @ runtime.js:144
(anonymous) @ runtime.js:170
callInvokeWithMethodAndArg @ runtime.js:169
enqueue @ runtime.js:192
prototype.<computed> @ runtime.js:97
push.ls82.exports.async @ runtime.js:216
getAllBlog @ App.js:123
(anonymous) @ App.js:152
commitHookEffectList @ react-dom.development.js:21996
commitPassiveHookEffects @ react-dom.development.js:22030
callCallback @ react-dom.development.js:337
invokeGuardedCallbackDev @ react-dom.development.js:386
invokeGuardedCallback @ react-dom.development.js:441
flushPassiveEffectsImpl @ react-dom.development.js:25349
unstable_runWithPriority @ scheduler.development.js:818
runWithPriority$2 @ react-dom.development.js:12131
flushPassiveEffects @ react-dom.development.js:25318
(anonymous) @ react-dom.development.js:25197
workLoop @ scheduler.development.js:762
flushWork @ scheduler.development.js:717
performWorkUntilDeadline @ scheduler.development.js:219

This is my package.json file这是我的package.json文件

{
    "name": "my-project",
    "version": "1.0.0",
    "description": "",
    "private": true,
    "scripts": {
        "watch": "webpack --watch",
        "start": "webpack-dev-server --open --config webpack.dev.js",
        "build": "set NODE_ENV=production&& webpack --config webpack.prod.js",
        "build-dev": "webpack --config webpack.devBuild.js",
        "share": "ngrok http 8080 -host-header=\"localhost:8080\"",
        "build-functions-index": "set NODE_ENV=functions&& babel functions/indexES6.js --out-file functions/index.js",
        "build-functions-distFunctions": "rimraf functions/distFunctions && set NODE_ENV=functions&& babel functions/src --out-dir functions/distFunctions --copy-files",
        "build-functions-distApp": "rimraf functions/distApp && set NODE_ENV=functions&& babel src --out-dir functions/distApp --copy-files"
    },
    "keywords": [],
    "author": "",
    "license": "ISC",
    "devDependencies": {
        "@babel/cli": "^7.7.0",
        "@babel/core": "^7.7.2",
        "@babel/node": "^7.7.0",
        "@babel/preset-env": "^7.7.1",
        "@babel/preset-react": "^7.7.0",
        "babel-eslint": "^10.0.3",
        "babel-loader": "^8.0.6",
        "babel-plugin-module-resolver": "^3.2.0",
        "babel-plugin-styled-components": "^1.10.6",
        "clean-webpack-plugin": "^3.0.0",
        "css-loader": "^3.2.0",
        "dotenv-webpack": "^1.6.0",
        "eslint": "^6.6.0",
        "eslint-import-resolver-alias": "^1.1.2",
        "eslint-module-utils": "^2.4.1",
        "eslint-plugin-import": "^2.18.2",
        "eslint-plugin-react": "^7.16.0",
        "eslint-plugin-react-hooks": "^2.2.0",
        "file-loader": "^4.2.0",
        "firebase-admin": "^8.7.0",
        "html-webpack-plugin": "^3.2.0",
        "react-hot-loader": "^4.12.17",
        "rimraf": "^3.0.0",
        "style-loader": "^1.0.0",
        "url-loader": "^2.2.0",
        "webpack": "^4.41.2",
        "webpack-bundle-analyzer": "^3.6.0",
        "webpack-cli": "^3.3.10",
        "webpack-dev-server": "^3.9.0",
        "webpack-manifest-plugin": "^2.2.0",
        "webpack-merge": "^4.2.2"
    },
    "dependencies": {
        "@babel/polyfill": "^7.7.0",
        "@hot-loader/react-dom": "^16.11.0",
        "animejs": "^3.1.0",
        "firebase": "^7.3.0",
        "fuse.js": "^3.4.5",
        "md5": "^2.2.1",
        "prop-types": "^15.7.2",
        "query-string": "^6.8.3",
        "react": "^16.11.0",
        "react-dom": "^16.11.0",
        "react-helmet": "^5.2.1",
        "react-router-dom": "^5.1.2",
        "react-transition-group": "^4.3.0",
        "styled-components": "^4.4.1"
    },
    "sideEffects": [
        "*.css"
    ]
}

QUESTION问题

I've updated a bunch of packages, removed and installed some new ones over the last few days.在过去的几天里,我更新了一堆软件包,删除并安装了一些新软件包。 How can I find out which package is using that method?如何找出哪个 package 正在使用该方法?

The component with the issue is SideEffect as noted in the error.如错误中所述,存在问题的组件是SideEffect This function is provided with react-side-effect .这个 function 提供了react-side-effect Looking at your package.json file, I don't see it listed as a dependency, therefore it's probably inside your package-lock.json file.查看您的 package.json 文件,我没有看到它列为依赖项,因此它可能在您的 package-lock.json 文件中。 This implies that a package you have installed has this as a dependency on an older version of react-side-effect .这意味着您安装的 package 依赖于旧版本的react-side-effect

$ grep -i effect package-lock.json 
        "react-side-effect": "^1.1.0"

You may resolve this by manually installing a newer version that doesn't use componentWillMount:您可以通过手动安装不使用 componentWillMount 的较新版本来解决此问题:

npm i react-side-effect@2.1.0

The way I've end up solving this:我最终解决这个问题的方式:

  • Open new window on VSCode在 VSCode 上打开新的 window
  • Open folder node_modules打开文件夹node_modules
  • Ctrl + Shift + F (opens search) Ctrl + Shift + F (打开搜索)
  • Searched for componentWillMount on the node_modules folder and subfoldersnode_modules文件夹和子文件夹中搜索componentWillMount

This was necessary because VSCode ignores the node_modules folder by default.这是必要的,因为 VSCode 默认忽略node_modules文件夹。 You can change this setting, but I think it's easier to use a new window of VSCode and open the node_modules on it.您可以更改此设置,但我认为使用 VSCode 的新 window 并在其上打开node_modules会更容易。

You should just install react-helmet version 6 by the following command:您应该通过以下命令安装react-helmet版本6

npm install --save react-helmet@^6.0.0-beta.2

Or或者

yarn add react-helmet@^6.0.0-beta.2

Hint : The warning issue comes from the incompatibility of react-helmet version 5 with react-js version 16.10 and later.提示:警告问题来自react-helmet版本5react-js版本16.10及更高版本的不兼容。

I had the same problem and after a few searches, I found that uninstalling 'react-helmet' package and replacing it for 'react-helmet-async' fixed the error while updating react-helmet didn't我遇到了同样的问题,经过几次搜索,我发现卸载“react-helmet” package 并将其替换为“react-helmet-async”修复了更新 react-helmet 时的错误没有

npm i react-helmet-async

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 在reactjs componentWillMount()中,如何获取哪个组件? - in reactjs componentWillMount(), how to get which component? 分析:如何找出方法附加到哪个对象? - Profiling: how to find out which object a method is attached to? 找出哪种包因使用不受支持的功能而中断的最佳技术是什么? - What is the best technique to find out which package breaks due to using unsupported features? 如何找出用户使用的浏览器? - How can I find out which browser a user is using? 在componentWillMount方法中使用axios给我带来了一个奇怪的错误 - using axios in componentWillMount method got me an weired error 如何找出节点/npm package 导出了哪些函数? - How do you find out which functions are exported by a node/npm package? React JS - ESLint - 使用 UNSAFE_componentWillMount、UNSAFE_componentWillUpdate 和 UNSAFE_componentWillReceiveProps 忽略组件的规则 - React JS - ESLint - Rules for ignoring components with UNSAFE_componentWillMount, UNSAFE_componentWillUpdate, and UNSAFE_componentWillReceiveProps redux如何使用react-router重定向componentWillMount - redux how to redirect on componentWillMount using react-router 如何隐藏 componentWillMount 警告 - How to hide componentWillMount warnings 无法在componentWillMount中找到属性集 - Cannot find property set in componentWillMount
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM