I've tried both, but between D3's odd imho data-binding and React animation limitations, I gave up and found using RactiveJS with SVG directly was much easier: http://examples.ractivejs.org
RactiveJS uses virtual dom as well, so was quite performant and very easy animations of properties.
I don't agree that D3's data binding is especially odd. It isn't as straightforward as React's vdom descriptor, but it's not especially complicated: https://bost.ocks.org/mike/circles/
It's definitely a steeper learning curve than simply creating a node and appending to the DOM (the d3-specific idioms are particularly obtuse) but it's not insurmountable.
To each their own - my issue is if you are starting with some JS data (via API, etc) - trying to bind to D3 is rather complex compared to using other view tech.
That's fair. Keep in mind that d3's major use case has historically been for building interactive data visualizations with dynamic data. Viewed through that lens, its data binding is a pretty integral part of the design.
RactiveJS uses virtual dom as well, so was quite performant and very easy animations of properties.