我正在运行这个程序来显示 SVG 图像
import React, { Component } from 'react';
import { View } from 'react-native';
import Expo from './assets/check-mark.svg';
import SVG from 'react-native-svg';
export default class MyApp extends Component {
render(){
return (
<View style={{backgroundColor:"black"}}>
<Expo width={20}
height={15} />
</View>
);
}
}
并遇到了这个错误
Error: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: number.
我该如何解决这个问题? 或者还有其他更好的方法来使用React Native 的SVG 图像吗?
对于 svg 文件react-native-svg 建议使用react-native-svg-transformer。
安装软件包:
yarn add --dev react-native-svg-transformer
将配置添加到
metro.config.js
:
const { getDefaultConfig } = require('metro-config');
module.exports = (async () => {
const {
resolver: { sourceExts, assetExts },
} = await getDefaultConfig();
return {
transformer: {
babelTransformerPath: require.resolve('react-native-svg-transformer'),
},
resolver: {
assetExts: assetExts.filter(ext => ext !== 'svg'),
sourceExts: [...sourceExts, 'svg'],
},
};
})();
这样你就应该能够渲染你的 SVG 文件了。
metro.config.js
文件
const {getDefaultConfig} = require('metro-config');
module.exports = (async () => {
const {
resolver: {sourceExts, assetExts},
} = await getDefaultConfig();
return {
transformer: {
babelTransformerPath: require.resolve('react-native-svg-transformer'),
},
resolver: {
assetExts: assetExts.filter((ext) => ext !== 'svg'),
sourceExts: [...sourceExts, 'svg'],
},
};
})();
停止 Metro 捆绑程序或清除 Metro 捆绑程序缓存
使用
yarn run ios
再次重建应用程序
在react-native中显示SVG的最佳方法(据我所知,这是最好且简单的方法)是:
首先安装这个SVG包: npm 我反应-native-svg
其次,
PS:无需安装SVG变压器包
安装所有必需的组件后我遇到了同样的问题 包裹。但在停止 Metro Bunler 并重建项目之后 我的问题自动解决了。
为了博览会
1_ 安装 React Native svg 转换器 npm i --save-dev react-native-svg-transformer 和 npm 我反应-native-svg
2_ 在 metro.config.js 文件
const { getDefaultConfig } = require("expo/metro-config");
module.exports = (() => {
const config = getDefaultConfig(__dirname);
const { transformer, resolver } = config;
config.transformer = {
...transformer,
babelTransformerPath: require.resolve("react-native-svg-transformer")
};
config.resolver = {
...resolver,
assetExts: resolver.assetExts.filter((ext) => ext !== "svg"),
sourceExts: [...resolver.sourceExts, "svg"]
};
return config;
})();
3_ 用于打字稿 使用此声明创建 declarations.d.ts 文件
declare module "*.svg" {
import React from "react";
import { SvgProps } from "react-native-svg";
const content: React.FC<SvgProps>;
export default content;
}
4_关于更改填充属性: 创建文件 .svgrrc 并在其中
{
"replaceAttrValues": {
"#000": "{props.fill}"
}
}
然后确保 SVG 文件填充属性中的路径标记是十六进制代码(在本例中为 #000)5_ 终止终端并运行 npx expo start --clear
这里是 expo 和 React 本机应用程序的配置
https://github.com/kristerkari/react-native-svg-transformer#installation-and-configuration