2017-03-02 19 views
2

を更新することができます私は私のコンポーネントでタイムアウト内部SETSTATEを必要とするので、私はこれをやった:が反応:SETSTATEのみを搭載したり、部品実装

componentDidMount() { 
    this.timeouts.push(setTimeout(() => { 
    this.setState({ text: 2 }); 
    }, 4000)); 
} 

componentWillUnmount() { 
    this.timeouts = []; 
} 

をしかし、私はこのエラーを取得しています:

Warning: setState(...): Can only update a mounted or mounting component. 
This usually means you called setState() on an unmounted component. 
This is a no-op. 

私は間違っていますか?

+0

あなたはSETSTATEあなたの部品が実装されますが、あなたのコンポーネントが、部品が実装された後 –

+0

@IhorSkliar componentDidMountが問題 –

+0

@IhorSkliar I」文句を言わないことがとてもcomponentDidMount機能の状態を設定する、と呼ばれているマウントされていません呼び出す前に、 mは内部のcomponentDidMountを使用しているので、マウントされています。 –

答えて

6

componentWillUnmountを変更してタイムアウトを適切にクリアしてください。配列を空にする代わりに、タイムアウトをクリアするには、clearTimeoutを使用する必要があります。

componentDidMount() { 
    this.timeouts.push(setTimeout(() => { 
    this.setState({ text: 2 }); 
    }, 4000)); 
} 

clearTimeouts: function() { 
    this.timeouts.forEach(clearTimeout); 
} 

componentWillUnmount() { 
    this.clearTimeouts(); 
} 
関連する問題