Asynchronous data loading is the core of the problem. React without any other addons like redux, where state is dumped into the page and just passed down through props would avoid the issue (though it can have a different one where the page is blank for a moment before the javascript renders the page). Same with HTML and no frontend framework, it's all loaded synchronously with page load so there's no "empty data" state.
Redux encourages loading data like that, and the easy way to use Router makes it easy to do that - all URLs get sent to the same backend view to render the app, then the frontend takes the URL args and triggers ajax to get the data. During that interim when the ajax is running is when you get this empty-data state.