Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

React Native - Image Require Module using Dynamic Names

I'm currently building a test app using React Native. The Image module thus far has been working fine.

For example, if I had an image named avatar, the below code snippet works fine.

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

But if I change it to a dynamic string, I get

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

I get the error:

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

Obviously, this is a contrived example, but dynamic image names are important. Does React Native not support dynamic image names?

React native error with dynamic image name

like image 321
Shaheen Ghiassy Avatar asked Jun 15 '15 20:06

Shaheen Ghiassy


People also ask

Can we use require in react-native?

Yes the latest React Native tutorials and examples use the new import syntax. I think most people prefer the new ES6 syntax. However no JS engines implement ES6 modules currently, so it needs to be converted by an ES6 transpiler (e.g. Babel) to require statements.


1 Answers

This is covered in the documentation under the section "Static Resources":

The only allowed way to refer to an image in the bundle is to literally write require('image!name-of-the-asset') in the source.

// 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} /> 

However you also need to remember to add your images to an xcassets bundle in your app in Xcode, though it seems from your comment you've done that already.

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

like image 84
Colin Ramsay Avatar answered Sep 19 '22 08:09

Colin Ramsay