在 React Native 中有条件地渲染 svg 文件

Conditional rendering of svg files in react native

我有一个买卖狗的应用程序。在我的应用程序中,每个犬种都有自己的 svg 文件存储在我的资产文件夹中(大约 150 个 svg 文件)。从后端获取 post 数据时,我得到了关于 post 的不同信息,包括 dogBreed,例如{dogBreed:golden-retriver}。我想为每只 post 狗渲染相应的 svg,但我不确定处理此问题的最佳方法是什么。 我的应用程序应该导入所有 svg 文件吗? 我应该将所有 svg 文件转换为 JSX 文件吗?我已经在应用程序的其他部分完成了此操作。 如果我要使用 JSX 解决方案,我应该根据名称有条件地呈现 JSX,例如:<${dogBreed}/>(如果可能的话),或者我应该让一个组件接受狗品种作为一个道具并有条件渲染的逻辑? .这将创建一个巨大的文件,我不确定 150 if else/switch 语句是否可行。我感觉真的被困在这里了。

首先,将您所有的 svg 文件转换为响应本机 JSX 文件。

然后你可以根据名称延迟加载 svg(我假设) 像

const breedName = data.dogBreed;    
const component = React.lazy(() => import(`./assets/${breedName}.jsx`));

我推荐你使用 react-native-svg-transformer 库。

这是去图书馆的 link:https://github.com/kristerkari/react-native-svg-transformer 这个库允许你导入 svg 文件而不需要转换它们。

配置完成后类似这样即可

...
import LogoA from "./logo_a.svg";
import LogoB from "./logo_b.svg";
...

return cond ? <LogoA width={120} height={40} /> : <LogoB width={120} height={40} />

...

尝试使用这个库 https://github.com/stowball/react-native-svg-icon。 在一个文件中将所有 svg 转换为 JSX。

创建一个组件作为导入上述 SVG 的 react-native-svg-icon 之间的桥梁

您可以直接将其用作组件。

import Icon from './components/Icon';

// Inside some view component
render() {
  return (
    <Fragment>
      <Icon name="SortArrows" height="20" width="20" />
      <Icon name="Tick" fill="#0f0" viewBox="0 0 200 200" />
      <Icon name="Star" fill="transparent" stroke="#fff" strokeWidth="5" 
  />
    </Fragment>
 );
}

您可以将名称设置为动态以呈现动态 svg 图标。试试吧。