如何在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
相关产品推荐
相关产品推荐

