Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

211
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda