Верстаете loader (spinner или что угодно), который будет вертеться, пока приложение грузится.
Через XHR (например, axios, request-promise, fetch итд) загружаете нужные данные, формируете initialState и запихиваете его в createStore().
Когда приложение отрендерится - прячете loader.
Что-то вроде такого.
Promise.props({
user: fetch('/user'),
products: fetch('/products')
}).then(initialState => {
const store = createStore(reducer, initialState);
render(<Provider store={store}><App /></Provider>, mountNode);
});