React Native集成SVG图标遇RNSVGSvgview未实现错误求助
确认依赖版本匹配
检查react-native-svg版本是否与你的Expo SDK版本兼容(比如Expo SDK 49对应react-native-svg@13.10.0左右)。用npm list react-native-svg或yarn list react-native-svg查看当前版本,若不兼容,卸载后重装对应版本:npx expo install react-native-svg@匹配你的SDK的版本号同时确保react-native-svg-transformer使用稳定版:
npm install react-native-svg-transformer --save-dev验证metro配置正确性
项目根目录的metro.config.js(无则新建)必须正确配置transformer,示例配置如下:const { getDefaultConfig, mergeConfig } = require('@expo/metro-config'); const config = {}; config.transformer = { babelTransformerPath: require.resolve('react-native-svg-transformer'), }; config.resolver = { assetExts: getDefaultConfig(__dirname).resolver.assetExts.filter(ext => ext !== 'svg'), sourceExts: [...getDefaultConfig(__dirname).resolver.sourceExts, 'svg'], }; module.exports = mergeConfig(getDefaultConfig(__dirname), config);注意:Expo SDK 48及以下版本需将导入改为
require('metro-config')。检查SVG导入与使用方式
必须将SVG作为组件导入,而非资源引用:import MyIcon from './assets/icons/my-icon.svg';然后在JSX中直接使用组件:
<MyIcon width={24} height={24} />避免使用
require('./assets/icons/my-icon.svg')这类方式,同时检查SVG文件本身是否有语法错误(如未闭合标签、不兼容属性),可先用简单矩形SVG测试。清理缓存并重启服务
- 清除Expo缓存:
npx expo start --clear - iOS模拟器:选择「Hardware」→「Erase All Content and Settings」后重启
- Android端:清除应用缓存或卸载重装应用
- 清除Expo缓存:
iOS Pod依赖检查(仅裸Expo/ ejected项目)
进入ios目录执行pod install,确保react-native-svg的Pod正确安装;打开Xcode,确认libRNSVG.a已添加到项目的「Linked Frameworks and Libraries」中。验证Expo Go兼容性
确保Expo Go为最新版本,旧版本可能不兼容新的react-native-svg版本;若问题仍存在,可尝试npx expo prebuild生成原生项目,用Xcode/Android Studio运行排除Expo Go的问题。
内容的提问来源于stack exchange,提问作者i chestor

