I know any user interaction intensive site can be built with Express and numerous templating engines. But when does React comes in picture?
Whenever you want your UI to be a (pure) function of your data; a change in your data, triggers a change in your UI, as simple as that; React enables you to do this elegantly.
I will recommend React to all web projects. React components are reusable (some of it can be reused) because HTML, CSS, JavaScript is in one place. By focusing on the Views alone, React is doing a good job of what it is good at. I am planning to use a combination of Meteor, React, React native for all my future projects - Web and apps.
React.js comes into picture when your application involves building complex UIs.
Eg. If you want to build a web app like hashnode, react would be good since it gives separation of concerns and reusability for your UI components.
If you are building a simple blog, using react is probably an overkill.
Sandeep Panda
co-founder, Hashnode
If you take a look at the Facebook docs, you will see that React is built to solve only one problem : Building large scale apps with data that changes over time.
If you are building a web app where the data changes frequently, you will ideally want your view to be a function of the data. When the data changes, the view should be able to update itself and reflect the changes. For example, when you are on Hashnode, you may see a lot of changes triggered by various parts of the app. Some of these changes are :
These are a few instances where the data changes quickly and we need to reflect that in the view. Unless your UI is a function of the data, it'll be difficult for you to manage the application. This is where React helps. You will build your app in terms of small reusable components and React will make sure that your view reflects the latest data. It's like hitting a refresh button automatically whenever the underlying data changes. Furthermore, by building well encapsulated components you are essentially making a testable app with good separation of concerns and maximum code reuse. It is also worth mentioning that React maintains a virtual DOM and only updates those parts of the view where underlying data has been changed (which results in improved performance).
On the other hand, if you are building something like a static site or a blog where the data change is minimal React may not be the right choice. As @somu said it'll probably be an overkill.
I strongly recommend going through the Docs to understand React.