2017-12-28 41 views
0

this.setState({device})は "this.state.device = __"を強制しない限り、状態をまったく更新していません。コンポーネントは再レンダリングされないため、問題が発生します。React Native Redux:this.setStateは状態を変更していません

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

などのコールバック関数を使用しようとしましたが、コードが全く記録されず、setStateが呼び出されていないことを示します。

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

あなたはconsole.logを共有できますか?また、if文がtrueと評価されることを確認するための "!this.state.device._id && devices.length"の値。 –

+0

レンダリング機能を挿入できるかどうかをもっと考えてください –

+0

なぜあなたの「componentDidMount」はあなたの外にありますか? –

答えて

1

問題は、stateと呼ばれる変数を使用しているReact Native状態を使用していないことです。これを解決するには、コンストラクタのライフサイクルメソッドを記述し、そこにthis.state =を入れて初期化します。

BtwはwillMountライフサイクルメソッドでこのようなことを避け、didMountで行い、その後UIをブロックしません。

+0

私は運が無ければこれを試しました コンストラクタ(小道具) {super(props)this.state = {viewType: 'day'、dt:moment ()、device:{}}} – Lalaluye

+0

didMountの設定状態がこれを修正しました。ありがとうございました! – Lalaluye

関連する問題