如何隐藏componentWillMount警告

Emi*_*son 5 javascript reactjs

我收到四个不能在控制台中最小化的大警告。这些警告来自我的理解,不是因为我做错了什么,而是因为react-router-dom和react-select使用了不赞成使用的componentWillMount函数。我如何摆脱警告?

我尝试在此站点上查找问题,但最接近我发现的解决方案的地方是/sf/answers/3441635781/。由于答案是一年多以前的,所以我想知道是否仍然如此。从那时起,这些大型/受欢迎的npm软件包是否仍未更新?

这是我收到的警告之一(其他类似):

react-dom.development.js:11494警告:componentWillMount已重命名,不建议使用。参见https:// fb。我/反应异步组件的生命周期钩子的详细信息。

  • 将具有副作用的代码移动到componentDidMount,并在构造函数中设置初始状态。
  • 将componentWillMount重命名为UNSAFE_componentWillMount以在非严格模式下禁止显示此警告。在React 17.x中,只有UNSAFE_名称起作用。要将所有已弃用的生命周期重命名为其新名称,可以npx react-codemod rename-unsafe-lifecycles在项目源文件夹中运行。

请更新以下组件:BrowserRouter,Route,Router,Switch

(我实际上试图运行“ npx react-codemodname-unsafe-lifecycles”,但没有区别)

我无法控制这些npm软件包在内部的工作方式,因此感到沮丧的是,我不断收到无法修复或删除的警告。

Vla*_*sky 6

解决此问题的常用方法是更新受影响的库(如您所说的 react-router 和 react-select)。如果这些正在维护,那么他们将发布不会产生这些警告的新版本。如果这不是您的选择,那么我不知道,我认为 React 没有抑制特定警告的方法。

请注意,警告仅显示在 React 的开发版本中,它们不会显示在 React 的生产版本中(请参阅DOC)。


小智 5

我找到的最好的..

const warn = console.warn;

function logWarning(...warnings){
  let showWarning = true;
  warnings.forEach(warning => {
    if (warning.includes("UNSAFE_")) showWarning = false;
    else if (warning.includes("SourceMap")) showWarning = false;
    else if (warning.includes("DevTools")) showWarning = false;
  });
  if(showWarning) warn(...warnings);
}


console.warn  = logWarning;
Run Code Online (Sandbox Code Playgroud)