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

如何在Expo中禁用Strict Mode?

在Expo中禁用Strict Mode的方案

当然可以在Expo中禁用Strict Mode,以下是具体实现方式,以及对你遇到的Automatic Batching问题的补充说明:

1. Expo Managed Workflow 禁用方式

修改项目根目录的app.json或app.config.js,添加development.strictMode配置并设置为false:

{
  "expo": {
    "name": "你的应用名称",
    "slug": "your-app-slug",
    // 其他原有配置...
    "development": {
      "strictMode": false
    }
  }
}

保存配置后重启Expo开发服务器,Strict Mode就会被关闭。

2. 自定义根组件的禁用方式

如果你的项目是手动注册根组件(比如index.js文件),直接移除<StrictMode>对根组件的包裹即可:

// 修改前
import { StrictMode } from 'react';
import { AppRegistry } from 'react-native';
import App from './App';
import { name as appName } from './app.json';

AppRegistry.registerComponent(appName, () => () => (
  <StrictMode>
    <App />
  </StrictMode>
));

// 修改后
import { AppRegistry } from 'react-native';
import App from './App';
import { name as appName } from './app.json';

AppRegistry.registerComponent(appName, () => App);

关于Automatic Batching的补充说明

你测试中遇到的异步代码下批量更新“失效”的现象,其实是React 18开发环境Strict Mode的双重渲染机制导致的。Strict Mode在开发阶段会重复执行组件渲染、effect等逻辑,用来提前检测潜在的副作用问题。所以你的示例里,异步回调中的三次setState本来应该触发一次重渲染,但因为Strict Mode的双重执行,看起来像是多次重渲染。

而在生产环境中,Strict Mode默认是关闭的,React 18的Automatic Batching会正常工作——不管是同步还是异步场景下的多个状态更新,都会被自动批量处理,只触发一次重渲染。

如果只是为了在开发环境验证Automatic Batching的实际效果,禁用Strict Mode就能看到预期的单次重渲染行为。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 19:31:07