【问题标题】:React Native Image uri doesn't workReact Native Image uri 不起作用
【发布时间】:2017-08-20 09:36:35
【问题描述】:

我试图显示本地文件中的图像,所以我尝试这样做

<Image 
    source={{uri:'../../assets/img_src/BTI.jpg'}}
    style={{height:150,width:150}}
/>

我的容器组件似乎得到了高度和宽度,但图像没有加载。所以我试试这个

<Image 
    source={require('../../assets/img_src/BTI.jpg')}
    style={{height:150,width:150}}
/>

它工作得非常好,不幸的是,据我所知,如果我想先操作地址文件并将其存储到变量中,我不能使用这个实现。 示例:

const imgSrc = `../../assets/${data.image}`;

其中 data.image = 'img_src/BTI.jpg'。 我尝试在android studio中删除我的android模拟器上的所有数据,但结果仍然相同。难道我做错了什么?有没有更好的实现方式?

非常感谢:)

【问题讨论】:

  • 你的意思是你不能使用 source={require(imgSrc)}?
  • 看起来这种情况正在发生,因为您尝试使用变量名称作为源来包含资产。此处接受的答案提供了一些关于为什么这不起作用的见解:stackoverflow.com/questions/30854232/…
  • @Hariks 是的,会出现错误信息

标签: android react-native react-native-image


【解决方案1】:

无法require() 动态路径是 React Native 的预期行为,打包程序需要提前知道路径 - 请参阅 React Native issues

我们在项目中遇到了这个问题,我们将图像 URL 存储在我们的数据库中,并希望在应用程序中连接字符串以获取本地存储图像的路径。正如您所发现的,这是行不通的。您可能会发现我们的解决方法很有用。

在我们的/images 文件夹中,我们创建了一个新的images.js 文件,它简单地导出了一个对象,其键映射到我们所有的本地图像路径,就像这样

  export const Images = {
    image1: require('./image1.png'),
    image2: require('./image2.png'),
    image3: require('./image3.png'),
  };

现在打包机提前知道了所有的路径并且很高兴。然后我们将imageKey 添加到数据库项并使用它而不是绝对路径。我们只是简单地抓取一张图片

import { Images } from '../images/images';
// get your image key e.g. passed down through props
const img = Images[imageKey];

...
render() {
    ...
    <Image source={img} />
    ...
}

可能不适合您的确切用例,但希望您可以利用它。

【讨论】:

  • 在我的项目中遇到了同样的问题,所以我尝试了@drjimmie1976 解决方案,它工作得很好,我只在/images 文件夹下将文件名更改为index.js,所以我可以称它更短正如import { Images } from '../images'; 一样,但与@drjimmie1976 所说的完全一样。
猜你喜欢
  • 1970-01-01
  • 2018-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多