Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Image not showing when mapping an array and render an image

I have this array of images in my project.

this.state.destinations = [{
    "destinationId": "001",
    "img": "../../assets/img/destinations/001.png"
  },
  {
    "destinationId": "002",
    "img": "../../assets/img/destinations/002.png"
  },
  {
    "destinationId": "003",
    "img": "../../assets/img/destinations/003.png"
  }]
}

I am trying to repeat each of them inside a View in a Image component like this:

render() {

    var {navigate} = this.props.navigation;

    return (
        <LinearGradient 
          colors={['#514A9D', '#24C6DC']} start={[0.0, 0.5]} end={[1.0, 0.5]} locations={[0.0, 1.0]} style={{flex:1}}>
            <ScrollView>
              {
                <View style={{paddingTop: 24}}>
                  {
                    this.state.destinations.map(dest => {
                      return <Image style={{height: 200, width: 600}} key={dest.destinationId} source={require(dest.img)} resizeMode="contain" />
                    })
                  }
                </View>
              }
            </ScrollView>
        </LinearGradient>
    );
  }

But I getting some crazy error in my phone when trying to run:

Error

I trying to run the app in expo and I am just developing it in react-native mode, not react-native-init mode.

like image 815
Paulo Henrique Junior Avatar asked Aug 20 '18 20:08

Paulo Henrique Junior


2 Answers

Try refactoring your code in the following way, moving your use of require directly to where your data is defined so that the static resource path is evaluated correctly:

this.state.destinations = [{
    "destinationId": "001",
    "img": require("../../assets/img/destinations/001.png")
  },
  {
    "destinationId": "002",
    "img": require("../../assets/img/destinations/002.png")
  },
  {
    "destinationId": "003",
    "img": require("../../assets/img/destinations/003.png")
  }]
}

And then update the way you render <Image /> like so, removing the call to require() and referencing dest.img directly:

this.state.destinations.map(dest => {
  return <Image source={dest.img}
           key={dest.destinationId}
           style={{height: 200, width: 600}} 
           resizeMode='contain' />
})

Hope this helps!

like image 114
Dacre Denny Avatar answered Nov 04 '22 04:11

Dacre Denny


Dynamic image import:

"img": require("../../assets/img/destinations/001.png")
<Image source={dest.img} />

Expo link: code

like image 2
Vinayak Bagaria Avatar answered Nov 04 '22 03:11

Vinayak Bagaria