反应原生 - 映像需要使用动态名称的模块

2022-08-30 05:13:10

我目前正在使用 React Native 构建一个测试应用程序。到目前为止,图像模块一直工作正常。

例如,如果我有一个名为 的图像,下面的代码片段工作正常。avatar

<Image source={require('image!avatar')} />

但是如果我将其更改为动态字符串,我会得到

<Image source={require('image!' + 'avatar')} />

我收到错误:

Requiring unknown module "image!avatar". If you are sure the module is there, try restarting the packager.

显然,这是一个人为的示例,但动态图像名称很重要。React Native 不支持动态映像名称吗?

React native error with dynamic image name


答案 1

这在文档中的“静态资源”部分下进行了介绍:

引用捆绑包中图像的唯一允许方法是在源中逐字编写 require('image!name-of-the-asset')。

// GOOD
<Image source={require('image!my-icon')} />

// BAD
var icon = this.props.active ? 'my-icon-active' : 'my-icon-inactive';
<Image source={require('image!' + icon)} />

// GOOD
var icon = this.props.active ? require('image!my-icon-active') : require('image!my-icon-inactive');
<Image source={icon} />

但是,您还需要记住将图像添加到Xcode中应用程序中的xcassets捆绑包中,尽管从您的评论中可以看出您已经这样做了。

http://facebook.github.io/react-native/docs/image.html#adding-static-resources-to-your-app-using-images-xcassets


答案 2

这对我有用:

我制作了一个自定义图像组件,该组件采用布尔值来检查图像是来自Web还是从本地文件夹传递。

// In index.ios.js after importing the component
<CustomImage fromWeb={false} imageName={require('./images/logo.png')}/>

// In CustomImage.js which is my image component
<Image style={styles.image} source={this.props.imageName} />

如果您看到代码,而不是使用以下代码之一:

// NOTE: Neither of these will work
source={require('../images/'+imageName)} 
var imageName = require('../images/'+imageName)

我只是把整个作为道具发送。它的工作原理!require('./images/logo.png')