This may not be the official way but I found that if you wrap CssTransition with TransitionGroup and move the key from img to CssTransition it will work as you want it to. The enter and exit animation will run at the same time, perfect for images to slide in and out at the same time or crossfade, etc.
<TransitionGroup component={null}>
<CSSTransition classNames="carousel" timeout={1000} key={this.state.imgLink}>
<img src={this.state.imgLink} />
</CSSTransition>
</TransitionGroup>
If you want one animation to start only after the other one has finished, wrap it with SwitchTransition.
Transition modes. out-in: Current element transitions out first, then when complete, the new element transitions in. in-out: New element transitions in first, then when complete, the current element transitions out.
type: 'out-in'|'in-out'
default: 'out-in'
<SwitchTransition mode={"out-in"}>
<CSSTransition classNames="carousel" timeout={1000} key={this.state.imgLink}>
<img src={this.state.imgLink} />
</CSSTransition>
</SwitchTransition>;