有没有办法检查 React 的“StrictMode”是否打开?

Erd*_*con 12 javascript reactjs react-strictmode

React 中有没有一种方法——无论是通过代码还是通过 React 开发工具——来查看组件是否正在ReactStrictMode中渲染?在我的梦想世界中,我可以有某种常数console.log,比如布尔值React.isStrictModeOnForThisComponentRendering;或者,当您在 React 开发工具中检查某个组件时,它会在侧面板的某个位置显示它是否在 StrictMode 下渲染。

明确地说,这个问题是:

  • 不是关于如何启用 StrictMode。(答案是<React.StrictMode>,尽管它也可以通过某些框架中的配置来设置,例如Next.js
  • 具体讨论 React 的严格模式StrictMode而不是 JavaScript 的( 'use strict';) 或TypeScript 的严格模式。这是一个重载的短语,但是 watcha 会怎样呢?
  • 由于使用 React 的 StrictMode 进行意外的双重渲染,您会感到困惑。请参阅此 GitHub 问题此 StackOverflow 帖子,了解它可能导致的挫败感。即使您无法判断组件树中的何处启用了 StrictMode,如果有一种简单的方法来验证组件是否在 StrictMode 下运行,那就太好了。

Erd*_*con 3

这不是一个明确或确定的方法,但你可以有目的地触发一个应该只在 React 的 StrictMode 中发生的警告。例如:

  • 您可以有目的地创建一个使用不安全生命周期的虚拟组件,它应该触发警告。这有点麻烦,因为如果您在整个应用程序中仅使用功能组件,则必须创建一个类组件才能使用不安全的生命周期方法。
  • 您可以有目的地在组件中使用(已弃用的)字符串引用,并且它应该触发警告。这比上面的功能组件更容易但更丑陋:你可以将它放在任何组件的 JSX 中,但如果它是功能组件,它会导致你的应用程序完全崩溃。但警告至少应该在应用程序崩溃之前出现。注意:我只是尝试重现这一点,虽然我仍然相信我的应用程序处于 React StrictMode,但我无法再像我之前看到的那样获取字符串引用来触发警告,这只会破坏应用程序。不确定发生了什么变化或者我正在做不同的事情,但这可能不如上面的选项那么好。

无论如何,此警告将包含如下文本

... found within a strict-mode tree ...
Run Code Online (Sandbox Code Playgroud)

这似乎很好地证明了组件正在严格模式下渲染。如果有一个更直接的辅助函数就好了,但它在紧要关头才起作用。