You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在TypeScript中检查React严格模式是否已启用?

检查React严格模式是否启用的TypeScript方案

方法一:利用严格模式的组件双挂载特性(推荐,无内部API依赖)

开发环境下,React严格模式会触发组件两次挂载以检测副作用,我们可以基于这个特性实现判断逻辑:

import { useEffect, useState } from 'react';

export function useIsStrictMode(): boolean {
  const [mountCount, setMountCount] = useState(0);

  useEffect(() => {
    setMountCount(prev => prev + 1);
  }, []);

  // 仅开发环境下严格模式会触发两次挂载,生产环境不会重复执行
  return mountCount >= 2 && process.env.NODE_ENV === 'development';
}

使用方式:

function MyComponent() {
  const isStrict = useIsStrictMode();
  console.log('是否处于严格模式:', isStrict);
  // 业务逻辑代码
}

方法二:访问React内部标识(仅开发调试用,有版本兼容风险)

如果需要非Hook的同步判断方式,可以读取React的内部未公开API(注意:这是React内部实现,官方可能随时修改,禁止在生产代码中依赖):

import React from 'react';

export function isStrictModeEnabled(): boolean {
  if (process.env.NODE_ENV !== 'development') return false;
  
  // 类型断言绕过TS检查
  const internals = (React as any).__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;
  return !!(internals?.ReactCurrentDispatcher?.current?.isStrictMode);
}

JS方案转TS失效的常见原因

之前的JavaScript方案转TypeScript后报错,通常是两个问题:

  • 访问内部API时未添加as any类型断言,触发TS类型检查报错
  • process.env.NODE_ENV无类型提示,可在tsconfig.json中添加"types": ["node"]解决

内容的提问来源于stack exchange,提问作者Jeff W

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 16:43:18