react server side rendering with client side routing

Joe Hanink

An initial server rendering for my homepage route ( / ) works fine.

Also, subsequent client side navigation to ( /#/page2 ) works fine.

However, if I load /#/page2 directly from the address bar, the server rendered homepage loads in the browser first and then visibly transitions to /#/page2, which is not what I want. I want only /#/page2 to show up without first flashing the homepage.

What's happening is that node is serving up the homepage for the request to /, and then when the response hits the client, the client is running the route handler for /#/page2. Both are behaving correctly. But it's not what I want.

How do I avoid this behavior?

I think what I need is a way to for both the server and client to be aware of the different routes and both be able to handle them (isomorphically), however, the fragment part of the url is not known to the server.

Anyone else have this problem?

This problem isn't react specific. It is specific to SSR to a deep link.

My node router handles "/" as follows

router.get('/', function(req, res) {
  var React = require('react');
  var Router = require('react-router');
  var Routes = require("../app/clapi-routes.jsx");

  var router = Router.create({location: req.url, routes: Routes});
  router.run(function(Handler, state) {
    var html = React.renderToString(<Handler/>);
    return res.render('index.ejs', {html:html});
  })
});

index.ejs is just:

<html lang="en">
  <head>
  <meta charset="UTF-8">
  <link rel="stylesheet" href="/css/json-inspector.css"/>
  </head>
<body style="margin:0">
  <%- html %>
  <script src="/build/bundle.js"></script>
</body>
</html>
Madd0g

Stop using hash powered navigation. Everything that comes after # is client-side only and useless for something like this. So /#/page2 needs to become /page2.

I'm not sure about react, but the same issue exists with other routing systems and there it's really easy to turn off the # in urls.

In angular's ui-router is done like this $locationProvider.html5Mode(true);

Your server-side would need to know to react to all the URLs your client-side knows, but that's how robustness is achieved - doesn't matter how navigation happens (client-side event or link click), both client and server can both handle the scenario end-to-end.

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

From Dev

react server side rendering with client side routing

From Dev

Server side or client side rendering

From Dev

Client side rendering React

From Dev

Express server with React front end routing without server side rendering

From Java

Client Routing (using react-router) and Server-Side Routing

From Dev

React-Router: Process of server request with Client-Side Routing?

From Dev

Routing on the server messes up routing on the client side?

From Dev

React JS : Migrate from server rendering to pure client side

From Dev

Client side rendering and skipping server rendering approach?

From Dev

React - server side component rendering

From Dev

React - server side component rendering

From Dev

When to use "client-side routing" or "server-side routing"?

From Java

ReactJS server-side rendering vs client-side rendering

From Dev

React isomorphic component with both client-side and server-side rendering

From Dev

how differs the client side UI routing from the server side routes

From Dev

Using same rendering code for client side and server side

From Dev

Using same rendering code for client side and server side

From Dev

react router rendering <noscript> in client side

From Dev

Rails 5 Redux React Server Side Rendering gives client side JavaScript warning 'Replacing React-rendered children with a new...'

From Dev

React/Redux server side rendering initial state

From Dev

React Server Side rendering is rerendered in frontend?

From Dev

React Router / Hapi Server Side Rendering Error

From Dev

Why use React server side rendering

From Dev

React server side rendering ReferenceError: document is not defined

From Dev

React server side rendering checksum warning

From Dev

React server side rendering wrong page

From Dev

React massive content and duplication with server side rendering

From Dev

React server side rendering renders incorrect content

From Dev

How to logically combine react-router and redux for client- and server-side rendering

Related Related

  1. 1

    react server side rendering with client side routing

  2. 2

    Server side or client side rendering

  3. 3

    Client side rendering React

  4. 4

    Express server with React front end routing without server side rendering

  5. 5

    Client Routing (using react-router) and Server-Side Routing

  6. 6

    React-Router: Process of server request with Client-Side Routing?

  7. 7

    Routing on the server messes up routing on the client side?

  8. 8

    React JS : Migrate from server rendering to pure client side

  9. 9

    Client side rendering and skipping server rendering approach?

  10. 10

    React - server side component rendering

  11. 11

    React - server side component rendering

  12. 12

    When to use "client-side routing" or "server-side routing"?

  13. 13

    ReactJS server-side rendering vs client-side rendering

  14. 14

    React isomorphic component with both client-side and server-side rendering

  15. 15

    how differs the client side UI routing from the server side routes

  16. 16

    Using same rendering code for client side and server side

  17. 17

    Using same rendering code for client side and server side

  18. 18

    react router rendering <noscript> in client side

  19. 19

    Rails 5 Redux React Server Side Rendering gives client side JavaScript warning 'Replacing React-rendered children with a new...'

  20. 20

    React/Redux server side rendering initial state

  21. 21

    React Server Side rendering is rerendered in frontend?

  22. 22

    React Router / Hapi Server Side Rendering Error

  23. 23

    Why use React server side rendering

  24. 24

    React server side rendering ReferenceError: document is not defined

  25. 25

    React server side rendering checksum warning

  26. 26

    React server side rendering wrong page

  27. 27

    React massive content and duplication with server side rendering

  28. 28

    React server side rendering renders incorrect content

  29. 29

    How to logically combine react-router and redux for client- and server-side rendering

HotTag

Archive