2017-09-21 1 views
0

Warum wird mein Status nicht auf die Variable lat gesetzt?

let lon, lat; 
 
let weather; 
 
if (navigator.geolocation) { 
 
    navigator.geolocation.getCurrentPosition(function(position) { 
 
    lat = position.coords.latitude; 
 
    lon = position.coords.longitude; 
 
console.log(typeof lat) 
 
}); 
 
} 
 
class Button extends React.Component{ 
 
state = {latt: lat} 
 
\t \t render(){ 
 
\t \t \t return(
 
\t \t <div> 
 
{this.state.latt} 
 
<h1>ss</h1> 
 
</div> 
 
\t \t \t 
 
)}} 
 

 
class Appp extends React.Component { 
 

 
\t render(){ 
 
\t \t return(
 
\t \t \t <Button /> 
 
\t \t)} 
 
\t } 
 
ReactDOM.render(<Appp />, mountNode)

what i did

Wenn ich die Variable console.log ich eine Nummer bekommen, aber warum kann ich es als ein Wert im Zustand verwenden. Selbst wenn man es in ein Array setzt, macht das keinen Unterschied.

+2

Bitte fügen Sie den entsprechenden Code auf Ihre Fragen. Das Arbeiten mit externen Bildern ist schwierig. –

+0

Können Sie Ihren Code hier veröffentlichen, um beim Debuggen zu helfen? – Rowland

+0

Ihr lat, lon kann nicht gefüllt werden, wenn die Klasse aufgerufen wird, da 'getCurrentPosition' nicht synchron ist. Stattdessen sollten Sie diesen Code in der Komponente verschieben und 'setState' verwenden, um lat und long festzulegen. – Panther

Antwort

0

sollte es sein:

let lat, lon, weather; 

class Calendar extends React.Component { 
    constructor(props){ 
     super(props); 
     this.state = { 
      lat: null, 
      lon: null 
     } 
     this.updateLatLon = this.updateLatLon.bind(this); 
    } 
    updateLatLon(){ 
     if (navigator.geolocation) { 
      navigator.geolocation.getCurrentPosition((position) => { 
       this.setState(() => { 
        return {lat: position.coords.latitude, lon: position.coords.longitude} 
       }); 
      }); 
     } 
    } 
    componentWillMount(){ 
     this.updateLatLon(); 
    } 
    render(){ 
     return (
      <div> 
       {this.state.lat} 
      </div> 
     ) 
    } 
} 
+0

Ich denke, Sie meinten Konstruktor statt Konstrukt. aber beide Möglichkeiten funktionieren nicht – Zamir

+0

HM das sollte auf jeden Fall funktionieren. Ich habe einige Änderungen am Code vorgenommen, die es funktionieren lassen könnten. nicht sicher. versuchen Sie und sagen Sie mir, welche Art von Fehlern Sie bekommen –

+0

Sie vergessen, die Klammer nach der Funktion navigator.geolocation.getCurrentPosition zu schließen. aber immer noch beide Wege funktionieren nicht. es zeigt nichts, der Staat ist undefined – Zamir

0

Sie den Zustand ändern, indem setState()

navigator.geolocation.getCurrentPosition(function(position) { 
    this.setState({ 
     lat: position.coords.latitude, 
     lon: position.coords.longitude 
    }); 
    console.log(typeof lat) 
}); 
+0

wo und wann? – Zamir

+0

Gute Frage, ich habe meine Antwort bearbeitet – MatTheWhale

+0

wo soll ich das hinzufügen? Ich bekomme unerwartetes Token – Zamir

Verwandte Themen