Reputation: 2212
I am just starting out with React-native and have a pretty decent grasp on React for creating web apps... I am running into a confusing issue here that never occured when working with react for the web.
Basically I am rendering a component whose image is being dynamically generated by mapping over an array of objects in its parent component.
export default class ImageComponent extends React.Component {
render() {
return (
<Image source={this.props.source}/>
);
}
};
And its parent component:
export default class MainComponent extends React.Component {
constructor(props) {
super(props);
this.state = {
images:[
{ src: './src/images/1.png'},
{ src: '/src/images/2.png'},
{ src: './src/images/3.png'}
]
}
}
render() {
let images = this.state.images.map((image) => {
return(<ImageComponent source={image.src} />);
})
return (
<View>
{images}
</View>
);
}
};
In device simulator I am getting the following error:
"Warning: Failed propType:Invalid prop 'source' supplied to 'Image' check the render method of 'BasicComponent'"
Does anyone know what could be going on here?
Upvotes: 57
Views: 75030
Reputation: 21
<Image source={require('./pathToImage/image.png')}/>
This also works if your using something in your project files rather than a URL.
Upvotes: 1
Reputation: 14918
<Image source= {{uri: "https://miro.medium.com/v2/resize:fit:1024/1*QY5S4senfFh-mIViSi5A_Q.png"}} style = {{width:100,height:100}}/>
add uri name in source, it will work.
Upvotes: 0
Reputation: 1082
you should be use uri for set source image
return (
<Image
source={{uri: 'https://reactnative.dev/docs/assets/p_cat2.png'}}
/>
);
Upvotes: 12
Reputation: 19049
You should either require the local assets or use object with uri
key.
So either in MainComponent
:
this.state = {
images:[
require('./src/images/1.png'),
require('./src/images/2.png'),
require('./src/images/3.png')
]
}
or in BasicComponent
:
return (
<Image
source={{uri: this.props.source}}
/>
);
Upvotes: 91