【问题标题】:How to open callouts for React Native Maps markers upon loading如何在加载时打开 React Native Maps 标记的标注
【发布时间】:2019-10-08 17:23:41
【问题描述】:

我希望在安装屏幕组件时打开所有标记的所有标注。目前,它仅在单击标记时才打开。如何在功能组件中使用 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>

当我console.log(markerRef.current)时,它不提供showCallout()方法。

【问题讨论】:

    标签: reactjs react-native react-native-maps


    【解决方案1】:

    最简洁的方法是创建自己的视图作为标记。 Arbitrary React Views as Markers

    您可以查看标记 here 的示例。 这是一个使用here的例子。

    这只是一个开始。您可以将自己的点击处理程序放在标记上并将其隐藏。

    所以,这可能不太理想,但可能会作为一个黑客。 从渲染函数开始。

    renderCallout() {
        if(this.state.calloutIsRendered === true) return;
        this.setState({calloutIsRendered: true});
        this.markerRef.showCallout();
    }
    

    然后将其添加到 onRegionChangeComplete 事件中。

    <MapView
      onRegionChangeComplete={() => this.renderCallout()}
      ...
    >
    

    【讨论】:

    • 谢谢,但我实际上是在尝试在功能组件中使用useRef。我似乎无法使用钩子访问showCallout() 方法
    • 我收到未定义的错误“无法读取属性 showCallout”。
    猜你喜欢
    • 2020-02-22
    • 2018-09-06
    • 1970-01-01
    • 2021-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多