Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

218
Vistas
¿Por qué no puedo establecer el valor del estado (el valor predeterminado es la ubicación actual si permito el permiso de ubicación) después de permitir el permiso de ubicación?

Tengo opciones selectas de colección de ciudades. El valor seleccionado predeterminado es la ubicación actual si lo permito. Pero después de permitir el permiso de ubicación, no puedo seleccionar otro valor. Por lo tanto, puedo seleccionar otra ciudad por un segundo y configurar la ciudad actual del estado nuevamente.

código de geolocalización de navegación:

 const useCurrentLocation = () => { // store location in state const [location, setLocation] = useState(); // Success handler for geolocation's `getCurrentPosition` method const handleSuccess = (position) => { const { latitude, longitude } = position.coords; setLocation({ latitude, longitude }); }; useEffect(() => { if (!navigator.geolocation) { return false; } // Call the Geolocation API navigator.geolocation.getCurrentPosition(handleSuccess); }, []); // Expose location result return { location }; }; export default useCurrentLocation;

encuentre la ciudad más cercana según las coordenadas de ubicación y establezca el código de ubicación:

 function Nearest({ loc, setLoc }) { const { location } = useCurrentLocation(); const { city } = useCity(); location && NearestCity(location.latitude, location.longitude); // Convert Degress to Radians function Deg2Rad(deg) { return (deg * Math.PI) / 180; } function PythagorasEquirectangular(lat1, lon1, lat2, lon2) { lat1 = Deg2Rad(lat1); lat2 = Deg2Rad(lat2); lon1 = Deg2Rad(lon1); lon2 = Deg2Rad(lon2); var R = 6371; // km var x = (lon2 - lon1) * Math.cos((lat1 + lat2) / 2); var y = lat2 - lat1; var d = Math.sqrt(x * x + y * y) * R; return d; } function NearestCity(latitude, longitude) { var minDif = 99999; var closest; var dif; city.map((item, index) => { dif = PythagorasEquirectangular(latitude, longitude, item.lat, item.lon); if (dif < minDif) { closest = index; minDif = dif; } }); setLoc(city[closest]); } //select city const handleChange = (e) => { var index = e.target.selectedIndex; setLoc(city[index]); };

opciones de selección de retorno:

 <select value={loc.name} onChange={handleChange}> {city.map((val, i) => ( <option id={i} key={i} value={val.name}> {val.name} - {i} </option> ))} </select>
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Al establecer el valor en su estado de reacción, lo ha convertido en una entrada controlada .

Una solución sería exportar setLocation desde su gancho useCurrentLocation y usarlo en lugar de su setLoc (o llamar a ambos si necesita setLoc ).

Otro enfoque podría ser usar defaultvalue (entrada no controlada) .

about 4 years ago · Juan Pablo Isaza Denunciar

0

¡Resolví el problema!

la solución es poner NearestCity dentro de un useEffect que se activa por ubicación.

 useEffect(() => { location && NearestCity(location.latitude, location.longitude); }, [location]);
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda