我正在尝试Map我的数据以创建Map标记:
import ShellIcon from '../../../assets/images/xxx.svg';
import BPIcon from '../../../assets/images/xxx.svg';
import TexacoIcon from '../../../assets/images/xx.svg';
return (
<View style={styles.container}>
...
<MapView
..>
{staticData.map((marker, i) => {
const MarkerIcon = marker.type;
return (
<Marker key={index} coordinate={item.coordinates} ref={markerRef}>
<MapPin price={item.price} icon={MarkerIcon} />
</Marker>
);
})}
</MapView>
</View>
);
贴图大头针:
const MapPin = ({ price, icon }: Props) => (
<View style={styles.bubbleContainer}>
<View style={styles.bubbleContent}>
<icon />
<Text style={styles.bubblePrice}>{price}</Text>
</View>
<View style={styles.bubbleArrow} />
</View>
);
我的数据是:
const staticData = [
{
name: 'test station',
type: 'ShellIcon',
price: '15.00p',
coordinates: {
latitude: 52.56504897473243,
longitude: -1.9835459043698045,
},
},
{
name: 'test station',
type: 'BpIcon',
price: '10.00p',
coordinates: {
latitude: 52.564655445785036,
longitude: -1.9895132194946084,
},
},
{
name: 'test station',
type: 'TexacoIcon',
price: '12.00p',
coordinates: {
latitude: 52.56675992926686,
longitude: -1.9925531724706291,
},
},
];
2条答案
按热度按时间disho6za1#
我相信你需要的是Map:
你不能只使用
string
的值来从import
中获取变量(请注意,marker.type
是string
的类型,而你在icon
中期望的是像SVG图标组件一样可构造的东西)368yc8dk2#
我认为这是因为你在map中初始化了
marker
,但你试图使用item
来达到这个值。另外,将图标移动到
staticData
,如下所示:也可以修改
MapPin
:如果你不想这样做,你需要编写switch case,以便通过使用type from staticData传递MarkerIcon。