具有大量图像的反应原生动态图像

问题描述:

我有150个按钮的数组链接到150个图片,我需要按下按钮后显示图片。这些按钮的信息存储在JSON文件中。这些照片的名字是按钮的ID的,所以1.JPG,2.JPG等具有大量图像的反应原生动态图像

现在我面对的,我不能写的问题:

fish["image"] = {uri: "asset-library://" + fish.id + ".jpg"}; 

而且随着如果其他解决方案声明不起作用,因为我有这么多的选择,任何想法?

非常感谢

我有一个类似的问题。我构建了一个包含巨大switch语句的函数,并且对每种情况都有静态需求。现在

function getImage(id) { 
    switch(id) { 
     case 1: 
      return require('./img/1.jpg'); 
     case 2: 
      return require('./img/2.jpg'); 
     ... 
    } 
} 

你可以做

fish["image"] = getImage(fish.id); 

我也不得不使用超过100个图标,所以不是手写的情况下,我建立了自动生成功能的脚本。

+1

这是我伤心的后备计划,但我我真的希望有人能拿出更好的东西 –

+0

@AdamKatz我不认为会有人会。 React Native解决本地图像问题的方法是在编译时将require的结果内联。每个字符串连接都不允许有人做这样的事情。 –

我对于我开发的组件也有这个问题。我在json文件中使用了base64图像。但也许它不适合你,我希望它能帮上忙。

<Image 
    style={styles.imgStyle} 
    source={{uri: CountryFlags[country.cca2]}} 
/> 

你可以在这里看到:https://github.com/xcarpentier/react-native-country-picker-modal/blob/master/src/index.js#L137-L139

如果你有关于它的文件夹,只要将影像转换这样的:

#!/bin/sh 

list=`ls ./flags | grep '[A-Z]'` 

echo "{" 
for item in $list 
do 
    header="data:image/png;base64," 
    img64=`ls ./flags/$item | xargs cat | base64` 
    echo ${item:0:2} :\'$header$img64\', 
done 
echo "}" 
+1

好主意!不错的工作 –

+0

我想了解这个解决方案。什么是'cca2'这只是一个整数索引值?这是你自己设计的一个未声明的变量和文件后缀吗? – zipzit

+0

@zipzit country.cca2是这些国家的ISO代码,如US或FR,并且对应于CountryFlag.js文件中的一个密钥,该文件包含与国旗相对应的json,并将其旗标编码为base64。 –