I'm having a hard time narrowing a repro down for this and there seem to be a lot of required moving parts, so I'll try to give as much information as I can.

Relevant snippet of package.json:

```
    "react": "15.0.0-rc.2", // repros w/ 0.14.7 as well
    "react-dom": "15.0.0-rc.2",
    "react-redux": "4.0.6",
    "react-router": "2.0.0-rc5",
    "react-router-redux": "4.0.0-rc.1",
    "redux": "3.2.1",
```

Our routes look something like this:

```
      <Route component={App}>
        <Route component={LayoutNoFooter}>
          <Route component={Page2} />
        </Route>
        <Route component={Layout}>
          <Route component={Page1} />
        </Route>
      </Route>
```

`LayoutNoFooter` simply wraps `Layout` and passes an additional prop in.

I have this component in the `Header`, which is rendered by `Layout`: https://gist.github.com/aaronjensen/86c9643ecc53ad4e9006

`Header` is a react-redux connected component.

`Page1` has a `componentWillUnmount` that dispatches an action that ultimately toggles `searchMode` in `HeaderLogo`. 

When I go from `Page1` to `Page2` the invariant violation fires.

If I `setTimeout` the action dispatch in `componentWillUnmount` it appears to work fine. If I replace `LayoutNoFooter` with `Layout` it appears to work fine.

The invariant violation is on the `img` tag of the `HeaderLogo`

![stack](https://screenshots-dx37.s3.amazonaws.com/monosnap/Integration_Test__Hotel_Results_2016-03-28_22-35-14.png)

I've tried building a repro in codepen, with a similar structure `setState` calls to simulate react-router and redux, but I suspect they are doing more that would require me to actually build a repro w/ those technologies. If that would be helpful, I can work on it over time and hopefully repro it. Maybe there's enough info here, however. Thanks!

this
        );
      } else {
        transaction.getReactMountReady().enqueue(
          inst.componentDidUpdate.bind(inst, prevProps, prevState, prevContext),
          inst
        );
      }
    }
  },
  /**
   * Call the component's `render` method and update the DOM accordingly.
   *
   * @param {ReactReconcileTransaction} transaction
   * @internal
   */
  _updateRenderedComponent: function(transaction, context) {
    var prevComponentInstance = this._renderedComponent;
    var prevRenderedElement = prevComponentInstance._currentElement;
    var nextRenderedElement = this._renderValidatedComponent();
    if (shouldUpdateReactComponent(prevRenderedElement, nextRenderedElement)) {
      ReactReconciler.receiveComponent(
        prevComponentInstance,
        nextRenderedElement,
        transaction,
        this._processChildContext(context)
      );
    } else {
      var oldNativeNode = ReactReconciler.getNativeNode(prevComponentInstance);
      ReactReconciler.unmountComponent(prevComponentInstance, false);