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
Answer from Colin Ramsay on Stack OverflowThis 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
RELEVANT IF YOU HAVE KNOWN IMAGES (URLS):
The way I hacked my way through this problem:
I created a file with an object that stored the image and the name of the image:
export const ANIMAL_IMAGES = {
dog: {
imgName: 'Dog',
uri: require('path/to/local/image')
},
cat: {
imgName: 'Cat on a Boat',
uri: require('path/to/local/image')
}
}
Then I imported the object into the component where I want to use it and just do my conditional rendering like so:
import { ANIMAL_IMAGES } from 'path/to/images/object';
let imgSource = null;
if (condition === 'cat') {
imgSource = ANIMAL_IMAGES.cat.uri;
}
<Image source={imgSource} />
I know it is not the most efficient way but it is definitely a workaround.
Hope it helps!
javascript - React Native - Dynamic Image Source
How do I dynamically change image sources?
Dynamic Image Sources of Local Image Files
Dynamic path using require in RN Image component
Videos
I don't think this is possible because react native needs to know what to bundle ahead of time (AFAIK). However, you can require all the files in your array:
var SECTIONS = [
{
title: 'One',
file: require('../images/one.jpeg'),
},
{
title: 'Two',
file: require('../images/two.jpeg'),
},
{
title: 'Three',
file: require('../images/three.jpeg'),
},
{
title: 'Four',
file: require('../images/four.jpeg'),
},
];
{SECTIONS.map((section, i) => (
<CategoryCard
key={i}
source={section.file}
title={section.title}
/>
))}
You can't use dynamic links. The best hack that i found to solve this is this:
var SECTIONS = {
One: {
title: 'One',
file: require('../images/one.jpeg'),
},
Two: {
title: 'Two',
file: require('../images/two.jpeg'),
},
Three: {
title: 'Three',
file: require('../images/three.jpeg'),
},
Four: {
title: 'Four',
file: require('../images/four.jpeg'),
},
};
{SECTIONS.map((section, i) => (
<CategoryCard
key={i}
source={section.file}
title={section.title}
/>
))}
That way, you can just use the files and if you have some kind of dynamic image selection, you can just use something like this
<Image source={SECTIONS[image.type]} />
For instance, if you up vote something on reddit and go back, it should show the up-vote across all instances of a post.
I've built a system in vanilla JS that basically assigns a class to the upvote keys.
So, like <img class="Upvote-for-${PostID}" src="/whatever"> then use the GetElementByClassName function to change all their sources.
How would I do this is React native?
Hi everybody, I'm trying to show a randomly generated image in my Image component, however I'm getting the following error:
invalid call at line 58:require(getRandomImage())
My component:
const [ randomImages, setRandomImages ] = useState([
//require('../assets/images/aranda.jpg'),
require('@assets/images/bilmore.jpg'),
require('@assets/images/cachalote.jpg'),
require('@assets/images/lola.jpg'),
require('@assets/images/meson.jpg'),
require('@assets/images/paloma.jpg'),
require('@assets/images/picasso.jpg'),
require('@assets/images/pimpi.jpg'),
require('@assets/images/tintero.jpg'),
require('@assets/images/tropicana.jpg'),
]);
const getRandomImage = () =>
{
return randomImages[rand(0,9)];
};
const rand = (min, max) =>
{
return Math.floor(Math.random() * (max - min)) + min;
}
<Image style={{ width:'100%', height:200,}} resizeMode="cover" source={require(getRandomImage())}/>