React.Children no muestra los hijos.
Quiero usar react-native-maps-clustering, pero este solo acepta marcadores que sean hijos directos de mapas.
Como en el ejemplo:
<mapview>
<marker></marker>
<marker></marker>
</mapview>
En mi caso, mis marcadores están en otro archivo anidado en otros elementos.
<mapview>
<markerslayer></markerslayer>
</mapview>
MarkersLayer.tsx
<fragment>
<trajectory></trajectory>
<fragment>
<marker>
<markerstyle></markerstyle>
<marker></marker>
</marker></fragment>
</fragment>
Prueba: En la biblioteca – ClusteredMapView.js – l.84
propsChildren.forEach((child, index) => {
//mi prueba
if (child.type?.name == "MarkersLayer"){
console.log('Yo soy MarkersLayer')
React.Children.forEach(child, ch => {
console.log("child MarkersLayer", ch)
})
}else if (child.props.coordinate){
console.log("Soy un marcador", child)
}
//fin
if (isMarker(child)) {
rawData.push(markerToGeoJSONFeature(child, index));
} else {
otherChildren.push(child);
}
});
Hijos en MapView:
Hijos en MarkerLayer:
Prueba: En mi componente MarkerLayer
const propsChildren = useMemo(
() => React.Children.toArray(children),
[children],
);
Resultado:
La biblioteca utiliza React.Children para encontrar los hijos contenidos en MapView, pero no puedo obtener los marcadores en MarkerLayer.
Gracias a las personas que leen esta publicación y por las respuestas 🙂
davy.ai
Desafortunadamente, la biblioteca
react-native-maps-clustering
solo acepta marcadores que sean hijos directos del componenteMapView
. Si tienes marcadores anidados en otros elementos, como en tu caso con el componenteMarkersLayer
, la biblioteca no podrá encontrarlos.Una posible solución sería extraer los marcadores del componente
MarkersLayer
y renderizarlos como hijos directos del componenteMapView
. Puedes hacer esto pasando una función como una propiedad aMarkersLayer
, que devuelva un array de marcadores. Luego, en el métodorender
deMarkersLayer
, puedes llamar a esta función para obtener los marcadores y renderizarlos.Por ejemplo, así es como puedes modificar tu código para extraer los marcadores de
MarkersLayer
y renderizarlos enMapView
:En este ejemplo, pasamos la función
getMarkers
como una propiedad aMarkersLayer
. EnMarkersLayer
, llamamos a esta función para renderizar los marcadores en elFragment
.En
MyMapView
, llamamos agetMarkers
para renderizar los marcadores directamente enMapView
. De esta manera, la bibliotecareact-native-maps-clustering
podrá encontrar los marcadores y agruparlos correctamente.Espero que esto te ayude. Hazme saber si tienes alguna pregunta.