Прежде всего, необходимо понимать, как у тебя меняется роут (стало больше сегментов или меньше).
Чтобы это можно было вычислить, нужно сравнивать предыдущий роут с текущим при апдейтах компонента.
Вариант #1: изменить SFC на класс и воспользоваться componentWillReceiveProps. Соответственно там трекаешь, как изменился роут и пишешь в setState.
Вариант #2: мемоизация каким-нибудь HOC'ом, например так
const withPrevProps = (Component) => {
let prevProps = null;
return (props) => {
const component = (
<Component
{...props}
prevProps={prevProps}
/>
);
prevProps = props;
return component;
};
};
const App = withRouter(withPrevProps(({ location, prevProps }) => (
...
)));
В обоих случаях, в рендере выставляешь классы в соответствии с тем как у тебя изменился роут.
<CSSTransition
classNames={'slide-' + slideDirection}
...
Живой пример не делал, но кажется это должно подойти