我正在尝试安装https://github.com/DylanVann/react-native-fast-image
我做了什么npm install --save react-native-fast-image-expo
因为我正在使用EXPO
之后,我使用npm link react-native-fast-image-expo
构建项目时,我无法从“ App.js”解析“ react-native-fast-image”
我尝试链接构建,但没有链接
有必要吗?如果我正在从API获取图像,该怎么使用?
答案 0 :(得分:1)
这并不完美,但是您可以使用react-native-expo-image-cache
作为替代。
Example.js
import {Image} from "react-native-expo-image-cache";
// preview can be a local image or a data uri
const preview = { uri: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==" };
const uri = "https://firebasestorage.googleapis.com/v0/b/react-native-e.appspot.com/o/b47b03a1e22e3f1fd884b5252de1e64a06a14126.png?alt=media&token=d636c423-3d94-440f-90c1-57c4de921641";
<Image style={{ height: 100, width: 100 }} {...{preview, uri}} />
从远程URI获取本地图像
import {CacheManager} from "react-native-expo-image-cache";
const {uri} = this.props;
const path = await CacheManager.get(uri).getPath();
// if path is undefined, the image download has failed
答案 1 :(得分:-1)
我尝试了所有可能的解决方案,最终实现了我自己的解决方案 - 非常快速和简单。在此处找到完整的解决方案 https://dev.to/dmitryame/implementing-fast-image-for-react-native-expo-apps-1dn3
这里是代码应该是不言自明的:
import React, { useEffect, useState, useRef } from 'react'
import { Image } from 'react-native'
import * as FileSystem from 'expo-file-system'
import PropTypes from 'prop-types'
const CachedImage = props => {
const { source: { uri }, cacheKey } = props
const filesystemURI = `${FileSystem.cacheDirectory}${cacheKey}`
const [imgURI, setImgURI] = useState(filesystemURI)
const componentIsMounted = useRef(true)
useEffect(() => {
const loadImage = async ({ fileURI }) => {
try {
// Use the cached image if it exists
const metadata = await FileSystem.getInfoAsync(fileURI)
if (!metadata.exists) {
// download to cache
if (componentIsMounted.current) {
setImgURI(null)
await FileSystem.downloadAsync(
uri,
fileURI
)
}
if (componentIsMounted.current) {
setImgURI(fileURI)
}
}
} catch (err) {
console.log() // eslint-disable-line no-console
setImgURI(uri)
}
}
loadImage({ fileURI: filesystemURI })
return () => {
componentIsMounted.current = false
}
}, [])// eslint-disable-line react-hooks/exhaustive-deps
return (
<Image
// eslint-disable-next-line react/jsx-props-no-spreading
{...props}
source={{
uri: imgURI,
}}
/>
)
}
CachedImage.propTypes = {
source: PropTypes.object.isRequired,
cacheKey: PropTypes.string.isRequired,
}
export default CachedImage
然后你像这样调用组件:
<CachedImage
source={{ uri: `${item.getThumbUrl}` }}
cacheKey={`${item.id}t`}
style={styles.thumbnail}
/>