React Native 0.60.5调用useColorScheme报is not a function如何解决
报错根因
TypeError: (0, _reactNative.useColorScheme) is not a function
该报错的核心原因是:useColorScheme Hook 是 React Native 0.62 版本才正式纳入核心包的官方API,你当前使用的0.60.5版本核心库并未内置该方法,直接从react-native导入调用自然会触发未定义报错。
解决方案
方案1:升级React Native版本(最优解)
- 如果项目允许做版本迭代,将React Native升级到0.62.0及以上的稳定版本,升级完成后就可以直接使用原有写法,不需要额外改动
// 0.62+版本直接从react-native导入即可正常使用 import { useColorScheme } from 'react-native'; const colorScheme = useColorScheme();
方案2:低版本兼容方案(不升级RN版本)
使用官方维护的社区兼容包react-native-appearance实现完全相同的能力,操作步骤如下:
- 安装依赖包
npm install react-native-appearance # 若使用yarn则执行:yarn add react-native-appearance
- 完成原生依赖关联
0.60+版本支持自动链接,iOS端额外执行一次Pod安装即可:
cd ios && pod install && cd ..
- 基础配置适配
- iOS端:在项目
ios/项目名/Info.plist中添加深色模式支持声明
<key>UIUserInterfaceStyle</key> <string>Automatic</string>
- Android端:将
android/app/src/main/res/values/styles.xml中的App主题父类改为Theme.AppCompat.DayNight.NoActionBar
- 代码替换原有导入
将原本从react-native导入useColorScheme的逻辑改为从兼容包导入即可,其余使用逻辑完全一致:
import { useColorScheme } from 'react-native-appearance'; const colorScheme = useColorScheme();
方案3:极简兜底方案(不需要动态跟随系统配色)
如果项目不需要适配系统深色/浅色模式切换,只是要快速解决报错问题,可以临时写一个自定义Hook兜底:
// 自定义兜底useColorScheme,默认返回light const useColorScheme = () => 'light'; const colorScheme = useColorScheme();
内容的提问来源于stack exchange,提问作者ramesh m
相关产品推荐
相关产品推荐

