My day job is building big data visualization applications with lots of D3 and React, so I have a lot of opinions about this.
If you can get away with using CSS transitions or react-motion in your app, and you don't need D3's enter-update-exit selections, I feel React's declarative syntax is a much simpler mental model and is consistent with how the rest of my app works. But anything complex you'll need to drop out of React and build your DOM in D3, which has a very different notion of element lifecycles than React and doesn't allow you to reuse any of your other React components.
1. use D3's low-level components to calculate layouts then render directly as React components, typically SVG elements, e.x. https://jsfiddle.net/g3o6t9xh/1/
2. use React's component lifecycle methods to grab the component's DOM element and render full D3 visualizations, e.x. https://jsfiddle.net/6xw2wvbc/2/
A simple example; the svg elements on this page https://ig.ft.com/sites/brexit-polling/
Code samples in the book still use D3 v3, but my most recent experiments have been in v4. There's a lot of content in there on animation and transitions, which seems like the hard part.
Currently figuring out how to do mass 10k+ element animations. Adding it to the book when I figure it out.
The most interesting aspect, which applies to apps beyond React, is likely to be respecting the D3 selections API[1], if needed. If you're already familiar with the ins and outs of selections, then I wouldn't expect any particular problems.
[1] https://github.com/d3/d3/blob/master/API.md#selections-d3-se...
http://bl.ocks.org/cpapazian/6228888157c39be85e9c (please excuse the coffeescript)
However, it looks like the work to modularize D3 will make it much, much easier to have the render function produce SVG markup directly.
It mostly uses React to interface with DOM and d3 v4.0 for the math, etc.
Not being too familiar with D3, what would I get by adopting it? I would hope for higher level primitives, but the API seems imperative and stateful, which doesn't seem like a good fit with React. Would I end up duplicating and syncing my existing app model state into D3 state?
https://medium.com/@mbostock/introducing-d3-scale-61980c5154...
https://medium.com/@mbostock/introducing-d3-shape-73f8367e6d...
Example at http://flowgear.me/s/1Ae7Pso if you're interested.
One thing to watch out for is that there are some svg object attributes (and some objects) that aren't declared in react.
I tend to go in the other direction, I use d3 rather then react for the rest of the page, so I don't have any issues with integration.