In my experience from using react apps on 2g/3g… I would much prefer the html. Usually, you get the content in 1-2 seconds with html, where you could end up with a react apps that never loads at all. Why does it never load? Because enterprising engineers usually invent their own timeouts that make no sense when you are dealing with bytes-per-second. There’s already a one minute timeout on the socket, and it knows if it is still receiving where your application has no sense of progress.
Please don’t reinvent things.