2017-12-28 16 views
0

this.setState ({device}) aktualisiert den Status überhaupt nicht, es sei denn, ich erzwinge es mit "this.state.device = __", aber es wäre immer noch ein Problem, da die Komponente nicht erneut gerendert wird. Ich habe versucht, eine Callback-Funktion, wie:React Native Redux: this.setState ändert nicht den Status

this.setState({device: selectedDeviceId},() => { 
    console.log(this.state.device) 
})  

aber der Code überhaupt nicht einloggen, was darauf hindeutet, dass setState nicht einmal genannt werden.

class Stats extends React.Component { 
    state = { 
    viewType: 'day', 
    dt: moment(), 
    device: {} 
    } 
    getDevice =() => { 
    const devices = this.props.devices || [] 
    const selectedDeviceId = this.props.selectedDeviceId 

    devices.forEach((d) => { 
     if (d._id === selectedDeviceId) this.setState({device: d}) 
    }) 
    if (!this.state.device._id && devices.length) { 
     this.setState({device: devices[0]}) 
    } 
    this.getUsage() 
    } 

    componentWillMount() { 
     console.log('Enter StatsScreen.componentWillMount') 
     let dt = this.state.dt 
     const date = moment(dt).format('YYYY-MM-D') 
     console.log(date) 
     this.getDevice() 
    } 
} 
+0

können Sie die console.log teilen. Und der Wert von "! This.state.device._id && devices.length", um sicherzustellen, dass die if-Anweisung als wahr ausgewertet wird. –

+0

Es wird mehr Idee geben, wenn Sie Ihre Renderfunktion auch einfügen können –

+0

Warum ist Ihr "componentDidMount" außerhalb Ihrer Statistikklasse? –

Antwort

1

Das Problem ist, dass Sie nicht React Native State verwenden Sie verwenden eine Variable, die Sie State genannt haben. Korrigieren Sie dies, indem Sie die Konstruktor-Lifecycle-Methode schreiben und this.state = dort eingeben, um sie zu initialisieren.

Btw vermeiden Dinge in der WillMount-Lifecycle-Methode tun dies in der DidMount tun, dann blockieren Sie nicht die Benutzeroberfläche.

+0

Ich versuchte dies ohne Glück Konstruktor (Requisiten) {Super (Requisiten) this.state = {viewType: 'Tag', dt: Moment(), Gerät: {}}} – Lalaluye

+0

Einstellungsstatus in didMount behoben. Vielen Dank! – Lalaluye

Verwandte Themen