在我的“img”文件夹下,我有5个文件夹:(“美国”,“欧洲”,“亚洲”,“非洲”,“澳大利亚”)。 每个文件夹都包含几个城市图像(欧洲文件夹将包含London.jpg,Paris.jpg,Rome.jpg等...)
现在,我的减速机给我2个道具。一个代表非洲大陆,另一个代表属于前一个道具的大陆城市。
我想要实现的是以城市形象加载城市形象。
类似的东西:
var icon = (this.props.myContinent && this.props.myCity) ?
require('./img/'+{this.props.myContinent}+'/'+{this.props.myCity}+'.png');
<Image source={icon} />
答案 0 :(得分:2)
您可以创建带有图像路径对象的图标组件,然后在容器中将城市名称添加到种类道具中。
const paths = {
'paris': require('./img/europe/paris.png'),
'london': require('./img/europe/london.png'),
}
export default function Icon({ kind }) {
return (
<Image
source={paths[kind]}
/>
);
}
然后在像
这样的容器中<Icon kind={this.props.city} />
答案 1 :(得分:0)
问题是你没有正确使用三元条件。您使用的?
没有:
。条件失败时使用一些图像。
像这样写:
var icon = (this.props.myContinent && this.props.myCity) ?
require(`./img/${this.props.myContinent}/${this.props.myCity}.png`)
: require('./img/defaultImage.png');
<Image source={icon}/>
答案 2 :(得分:0)
您的代码无效,因为必须静态了解require
中的图片名称。根据{{3}}:
// GOOD
<Image source={require('./my-icon.png')} />
// BAD
var icon = this.props.active ? 'my-icon-active' : 'my-icon-inactive';
<Image source={require('./' + icon + '.png')} />
// GOOD
var icon = this.props.active ? require('./my-icon-active.png') : require('./my-icon-inactive.png');
<Image source={icon} />
虽然这有点不方便,但实施起来相当容易。在你的情况下,我会想到以下内容:
const images = {
america: {
caracas: require('images/america/caracas.png'),
newyork: require('images/america/newyork.png')
},
europe:{
london: require('images/america/london.png'),
paris: require('images/america/paris.png')
rome: require('images/america/rome.png')
},
asia:{
// And so on...
}
}
然后,您的icon
初始化应如下所示:
var icon = (this.props.myContinent && this.props.myCity) ? images[this.props.myContinent][this.props.myCity] : null;
在render
你可以做这样的事情。 &#39;&amp;&amp;&#39;机制只是检查icon
是否为空:
{icon && <Image source={icon} />}