Реагируй нативный дисплей SVG из файла

Как отобразить изображение SVG, которое я require() в React Native.

Какой лучший способ просто отобразить изображение (не нужно манипулировать им).

Или я должен просто преобразовать его в PNG вместо этого?

3 ответа

Преобразование в png - самое простое решение. Изображения SVG перечислены в ProductPains как болевая точка, и вы можете заявить об этом, если увидите необходимость, но на данный момент не существует замечательного готового решения для изображений SVG.

Вы можете взломать это с помощью веб-просмотра. Я также должен был поместить свои SVG-файлы в виде строк в файлы.js (что совсем не хорошо). Но это работает довольно надежно. Есть доля секунды, когда они выглядят белыми перед загрузкой SVG, но для меня этого достаточно.

Примерно что-то вроде:

import React, { View, WebView } from 'react-native'
import s from 'string'

const firstHtml = '<html><head><style>html, body { margin:0; padding:0; overflow:hidden } svg { position:fixed; top:0; left:0; height:100%; width:100% }</style></head><body>'
const lastHtml = '</body></html>'
export default (props) =>
  <View style={props.containerStyle}>
    <WebView
      style={[{ width: 200, height: 100, backgroundColor: props.backgroundColor }, normalizeStyle(props.style)]}
      scrollEnabled={false}
      source={{ html: `${firstHtml}${props.svgContent}${lastHtml}` }}
    />
  </View>

Вы можете отобразить небольшой файл SVG в качестве данных, используя эту библиотеку,

Примечание. Большие изображения SVG отображаются неправильно.

нпм я реагирую родной удаленный svg

import Image from 'react-native-remote-svg'

<Image
 source={{
uri: `data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" 
width="100px" height="100px"  viewBox="0 0 100 100">
     <ellipse data-custom-shape="ellipse" cx="50" cy="50" rx="50" ry="50" 
fill="green"  stroke="#00FF00" stroke-width ="2" />
   </svg>`
}}
style={{ width: 100, height: 100}}
/>

Если вы хотите отображать изображения любого размера удаленно с помощью вышеуказанной библиотеки, а затем сделайте это,

<Image
  source={{ uri: 'https://example.com/my-pic.svg' }}
  style={{ width: 200, height: 532}}
/>

Но если вы использовали этот файл для отображения локального файла SVG, то у вас возникнут некоторые проблемы в Android, когда вы соберете пакет и выпустите релиз.

import Image from 'react-native-remote-svg'
<Image source={require('./image.svg')} />

или вы можете использовать Icomoon (для небольших изображений SVG / иконки),

Рекомендуется: используйте Icomoon для иконок и небольших изображений SVG

Смотрите это видео, чтобы настроить icomoon в реагировать родной

Другие вопросы по тегам