我希望所有的标注为所有的标记,以打开后,安装屏幕组件。目前,它只有在点击标记时才能打开。如何在函数组件中使用useRef来实现这一点?
const markerRef = useRef(React.createRef)
return (
<View style={styles.container}>
<MapView
style={{ flex: 1 }}
region={region}
onRegionChangeComplete={onRegionChangeComplete}
>
{data && data.posts.map(marker => (
<Marker
ref={markerRef}
key={marker.id}
coordinate={{latitude: marker.latitude, longitude: marker.longitude }}
>
<Callout>
<Text>{marker.title}</Text>
<Text>{JSON.stringify(marker.price)}</Text>
</Callout>
</Marker>
))}
</MapView>
<View style={styles.inputContainer}>
<Icon name="magnify" size={30} color="lightgrey" />
<TextInput
placeholder="Search Term"
style={styles.input}
onChangeText={setSearch}
value={search}
returnKeyType="search"
onSubmitEditing={handleSubmit}
/>
</View>
</View>
当I console.log(markerRef.current)
时,它不提供showCallout()
方法。
2条答案
按热度按时间mm9b1k5b1#
最简洁的方法是创建自己的视图作为标记。任意React视图作为标记
您可以看到标记here的示例。这里是一个使用here的例子。
这只是个开始您可以将自己的单击处理程序放在标记上并隐藏它。
所以,这可能不太理想,但可能是一个黑客。从渲染函数开始。
然后将其添加到onRegionChangeComplete事件。
ilmyapht2#
我这样做了
在父组件中
在子组件中