Por cada coordenada en el objeto, quiero obtener la dirección y ciudad correspondiente.
Quiero obtener la dirección y la ciudad para cada array de objetos, pero obtengo la misma dirección y ciudad para todos los objetos. Para el proyecto actual, obtengo las coordenadas haciendo clic en el mapa y usando mapEvents para obtener latlng. Las coordenadas se almacenan en el array de entrenamientos. Aquí está el código de sandbox simplificado.
export const WorkoutsData = [
{
id: 1,
coords: {latitude: 56.27360151291927,
longitude:-82.84886256490017},
},
{
id: 2,
coords: {latitude: 49.27360151291927,
longitude: -75.84886256490017},
},
{
id: 3,
coords: {latitude: 39.27360151291927,
longitude: -79.84886256490017},
}
];
import React, { useEffect, useState } from "react";
import "./styles.css";
import { WorkoutsData } from "./WorkoutLocation";
const App = () => {
const [workouts, setWorkouts] = useState(WorkoutsData);
const [cityName, setCityName] = useState([]);
const id = (Date.now() + "").slice(-10);
useEffect(() => {
workouts.map((workout) => {
fetch(
`https://geocode.xyz/${workout.coords.latitude},${workout.coords.longitude}?geoit=json`
)
.then((res) => res.json())
.then((result) => {
setCityName([`${result.staddress}, ${result.city}`]);
});
});
}, [workouts]);
return (
<>
<div key={id}>
{workouts.map((workout) => {
return <h2 key={workout.id}>{`${cityName}`}</h2>;
})}
</div>
</>
);
};
export default App;
Intenté muchos otros métodos. Pude obtener el nombre de la ubicación específica para los objetos de entrenamiento, pero el primercityName
no renderizó y el primer cityName
se pasó al segundo objeto de entrenamiento.
davy.ai
En la implementación actual,
setCityName
está sobrescribiendo el valor previo decityName
en cada iteración de la funciónmap
. En lugar de establecer una matriz de nombres de ciudades, puede almacenar el nombre de la ciudad para cada objeto de entrenamiento en una variable de estado separada utilizando la identificación del entrenamiento como clave.Así es como puede modificar el código:
Aquí,
cityNames
es un objeto con IDs de entrenamiento como claves y nombres de ciudades correspondientes como valores.setCityNames
actualiza este objeto fusionando el estado anterior decityNames
con una nueva propiedad para el ID actual de entrenamiento.En la función
map
, buscamos el nombre de la ciudad para cada entrenamiento por su ID en el objetocityNames
.Puede ver este código modificado en acción en este sandbox.