title: Stores' change listeners not getting removed on componentWillUnmount?
body: <p>I am coding a simple app on reactjs-flux and everything works fine except I am receiving a warning from reactjs telling me that I am calling setState on unmounted components.</p>
  
  <p>I have figured out this is because changelisteners to which components are hooked are not being removed from the store on <code>componentWillUnmount</code>. I know it because when I print the list of listeners from <code>Eventemitter</code> I see the listener which was supposed to be destroyed still there, and the list grows larger as I mount/unmount the same component several times. </p>
  
  <p>I paste code from my BaseStore:</p>
  
  <pre class="lang-js prettyprint-override"><code>import Constants from '../core/Constants';
  import {EventEmitter} from 'events';
  
  class BaseStore extends EventEmitter {
    // Allow Controller-View to register itself with store
    addChangeListener(callback) {
      this.on(Constants.CHANGE_EVENT, callback);
    }
  
    removeChangeListener(callback) {
      this.removeListener(Constants.CHANGE_EVENT, callback);
    }
  
    // triggers change listener above, firing controller-view callback
    emitChange() {
      this.emit(Constants.CHANGE_EVENT);
    }
  }
  
  export default BaseStore;
  </code></pre>
  
  <p>I paste the relevant code from a component experiencing this bug  (it happens with all components, though):</p>
  
  <pre class="lang-js prettyprint-override"><code>@AuthenticatedComponent
  class ProductsPage extends React.Component {
    static propTypes = {
      accessToken: PropTypes.string
    };
  
    constructor() {
      super();
      this._productBatch;
      this._productBatchesNum;
      this._activeProductBatch;
      this._productBlacklist;
      this._searchById;
      this._searchingById;
      this.state = this._getStateFromStore();
    }
  
    componentDidMount() {
      ProductsStore.addChangeListener(this._onChange.bind(this));
    }
  
    componentWillUnmount() {
      ProductsStore.removeChangeListener(this._onChange.bind(this));
    }
  
    _onChange() {
      this.setState(this._getStateFromStore());
    }
  }
  </code></pre>
  
  <p>This is driving me pretty nuts at this point. Any ideas?</p>
  
  <p>Thank you!</p>