React provides a renderToString() method that renders all components and returns the output in HTML. On the server you can put this string inside of an HTML file and send it as a response.
The tricky part though is to asynchronously fetch data for each of your components. Your state needs to be hydrated upon loading. Each component should specify what data it requires. On the server you then need to loop through these components and fetch that data. This works best with promises. As soon as you have fetched the necessary data on the server, you need to pass it to a global 'initial state' variable so that React can use that state and 'take over' the DOM.
I recommend checking out MERN, a 'Mongo, Express, React and Node' project by Hashnode that also does Server Side Rendering.