如何将 JSON 文件中的图像放入 React Native Js 页面

Anj*_*ali 2 reactjs react-native

我需要将 JSON 文件中的图像放入我的 React Native 页面。下面是我的代码:

 <View style={{ flexDirection: 'row', alignItems:'center' }}>
                       <Image source={{item.image}} style = {styles.imageView}/>
                 <View style={{  flex: 1, alignItems: "center"}}>
                        <Text  style={styles.Address1}>{item.addr} </Text>
                </View>
            </View>
Run Code Online (Sandbox Code Playgroud)

我可以从 JSOn 文件中读取其他内容,例如 item.addr 来自 json 文件,但不确定如何读取图像。我尝试像这样编写 json 文件:

 {

        "addr": "124 test drive, Ring road",
        "phone": "(951)-955-6200",
        "LatL":"33.977880",
        "Long2":"-117.373423",
        "cLat": "33.931989",
        "cLong": "-117.409222",
        "Online": "https://www.test.org",
         "image" : "require(\"CAC.png\")"
     }
Run Code Online (Sandbox Code Playgroud)

我还尝试在 JSON 文件中编写如下所示的图像

"image" : "require('../images/CAC.png')"
Run Code Online (Sandbox Code Playgroud)

看起来,它正在读取空白图像:下面是屏幕截图:

在此输入图像描述

下面的代码可以工作,但在这种情况下,我正在编写一个常量图像,而不是从 json 文件中读取。

 <Image source={require('../images/CAC.png')} style = {styles.imageView}/>
Run Code Online (Sandbox Code Playgroud)

我的代码位于项目目录中名为 Modules 的目录中。我的项目名称是 test,我的 Json 文件位于名为“Reducers”的目录中,reducers 也位于项目目录中,我的图像位于名为 images 的目录中,该目录也位于项目目录中。下面是路径:

c:\MobileApplication\test\Modules\ServiceListDetails.js
c:\MobileApplication\test\reducers\ServiceDetails.json
c:\MobileApplication\test\images\CAC.png
Run Code Online (Sandbox Code Playgroud)

我的项目名称是测试。下面是我的 imageView 样式

imageView:{
width:'30%',
height:100,
margin:7,
borderRadius: 7

},
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激。

Gas*_*ira 6

确保 json 文件中的图像名称正确。例如,.png 而不是 .PNG,然后你需要这样的东西:

首先创建一个组件来加载图标:

c:\MobileApplication\test\Modules\Icons.js
exports.CAC = require('../assets/images/CAC.png');
exports.CAD = require('../assets/images/CAD.png');
exports.CAE = require('../assets/images/CAE.png'); 
Run Code Online (Sandbox Code Playgroud)

其次,在组件中导入图标:

c:\MobileApplication\test\Modules\ServiceListDetails.js
import Icons from './Icons';
import resources from './ServiceDetails.json';
Run Code Online (Sandbox Code Playgroud)

最后:

  <Image source={Icons[resources.image]} style = {styles.imageView}/>
Run Code Online (Sandbox Code Playgroud)

现在你必须用你想要的代码更改 json 。

    "image": "CAC"
}
Run Code Online (Sandbox Code Playgroud)

或者

   "image": "CAD"
}
Run Code Online (Sandbox Code Playgroud)

或者

 "image": "CAE"
}
Run Code Online (Sandbox Code Playgroud)


Mas*_*oli 5

根据 Facebook文档,您可以通过两种方法来完成。

第一的:

正如您之前使用的那样,使用静态图像,但需要在 JSON 中进行一些更改。像这样重写你的对象

{
    "addr": "124 test drive, Ring road",
    "phone": "(951)-955-6200",
    "LatL":"33.977880",
    "Long2":"-117.373423",
    "cLat": "33.931989",
    "cLong": "-117.409222",
    "Online": "https://www.test.org",
    "image" : require("CAC.png") // <-- This line
}
Run Code Online (Sandbox Code Playgroud)

并像这样使用它

<Image source={item.image} style = {styles.imageView}/>
Run Code Online (Sandbox Code Playgroud)

其次: 如果您从外部服务器获取此 JSON,您也应该从服务器获取图像。

{
    "addr": "124 test drive, Ring road",
    "phone": "(951)-955-6200",
    "LatL":"33.977880",
    "Long2":"-117.373423",
    "cLat": "33.931989",
    "cLong": "-117.409222",
    "Online": "https://www.test.org",
    "image" : "https://example.com/path/to/your/image.png" // <-- This line
}
Run Code Online (Sandbox Code Playgroud)

像这样使用它

<Image source={{uri: item.image}} style = {styles.imageView}/>
Run Code Online (Sandbox Code Playgroud)

更新:

对于这个问题你可以这样做。

杰森是这样的

{
    "addr": "124 test drive, Ring road",
    "phone": "(951)-955-6200",
    "LatL":"33.977880",
    "Long2":"-117.373423",
    "cLat": "33.931989",
    "cLong": "-117.409222",
    "Online": "https://www.test.org",
    "image" : "CAD" // <-- This line
}
Run Code Online (Sandbox Code Playgroud)

和功能

getImage = (image) => {

    switch (image) {
        case "CAD":
            return require("CAD.png")
            break;
        case "CAD2":
            return require("CAD2.png")
            break;
        case "CAD3":
            return require("CAD3.png")
            break;

        default:
            return require("CAD4.png");
            break;
    }
}
Run Code Online (Sandbox Code Playgroud)

<Image source={this.getImage(item.image)} style = {styles.imageView}/>
Run Code Online (Sandbox Code Playgroud)