react-timer-mixin icon indicating copy to clipboard operation
react-timer-mixin copied to clipboard

Receiving a warning from TimerMixin after unmounting the component.

Open bcowgill opened this issue 8 years ago • 0 comments

Appears not to work properly, perhaps because used as a @mixin() ?

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. Please check the code for the undefined component. warning @ warning.js?8a56:44 getInternalInstanceReadyForUpdate @ ReactUpdateQueue.js?fd2c:45 ReactUpdateQueue.enqueueSetState @ ReactUpdateQueue.js?fd2c:192 ReactComponent.setState @ ReactComponent.js?702a:67 _handleDismiss @ AlertBanner.js?c408:195 (anonymous function) @ TimerMixin.js?fbdb:18 .

import { mixin } from 'core-decorators' import TimerMixin from 'react-timer-mixin'

@mixin(TimerMixin) class AlertBanner { render () { this._setupDismissTimer() ... } _setupDismissTimer () { let theTimer = this._dismissTimer if (this.state.autoDismiss && this._isShowing(this.state.transition)) { if (!theTimer) { theTimer = this.setTimeout( this._handleDismiss , TIMEOUT) } } else { this._clearDismissTimer() } this._dismissTimer = theTimer } @autobind _handleMouseEnter () { this._clearDismissTimer() } @autobind _handleMouseLeave () { this._setupDismissTimer() } _clearDismissTimer () { const timer = this._dismissTimer this._dismissTimer = void 0 if (timer) { this.clearTimeout(timer) } } }

I have to add this method to prevent an error, but I thought that was the point of this mixin to not have to clear any timers before we unmount.

componentWillUnmount() {
    this._clearDismissTimer()
}

bcowgill avatar Nov 03 '16 12:11 bcowgill