I came to this thread looking for a way to add images in a dynamic way. I quickly found that passing in a variable to the Image -> require() was not working.
Thanks to DerpyNerd for getting me on the correct path.
After implementing the resources in one place I then found it easy to add the Images. But, I still needed a way to dynamically assign these images based on changing state in my application.
I created a function that would accept a string from a state value and would then return the Image that matched that string logically.
Setup
Image structure:
app |--src |--assets |--images |--logos |--small_kl_logo.png |--small_a1_logo.png |--small_kc_logo.png |--small_nv_logo.png |--small_other_logo.png |--index.js |--SearchableList.js
In index.js, I have this:
const images = { logos: { kl: require('./logos/small_kl_logo.png'), a1: require('./logos/small_a1_logo.png'), kc: require('./logos/small_kc_logo.png'), nv: require('./logos/small_nv_logo.png'), other: require('./logos/small_other_logo.png'), } }; export default images;
In my SearchableList.js component, I then imported the Images component like this:
import Images from './assets/images';
I then created a new function imageSelect in my component:
imageSelect = network => { if (network === null) { return Images.logos.other; } const networkArray = { 'KL': Images.logos.kl, 'A1': Images.logos.a1, 'KC': Images.logos.kc, 'NV': Images.logos.nv, 'Other': Images.logos.other, }; return networkArray[network]; };
Then in my components render function I call this new imageSelect function to dynamically assign the desired Image based on the value in the this.state.network:
render() { <Image source={this.imageSelect(this.state.network)} /> }
Once again, thanks to DerpyNerd for getting me on the correct path. I hope this answer helps others. :)