Server-side rendering with JavaScript libraries like React is where the server returns a ready to render HTML page and the JS scripts required to make the page interactive. The HTML is rendered immediately with all the static elements.
By default, your React app will be client-side rendered. This means basically, all of the source code will live in JavaScript files referenced in a single HTML file that initializes your app.
CSR can be incorporated with the help of Javascript frameworks and libraries like Angular, VueJS and React SSR.
The most basic server rendering in React Router is pretty straightforward. However, there's a lot more to consider than just getting the right routes to render.
If you use react-router, you can just define a willTransitionTo
methods in components, which gets passed a Transition
object that you can call .wait
on.
It doesn't matter if renderToString is synchronous because the callback to Router.run
will not be called until all .wait
ed promises are resolved, so by the time renderToString
is called in the middleware you could have populated the stores. Even if the stores are singletons you can just set their data temporarily just-in-time before the synchronous rendering call and the component will see it.
Example of middleware:
var Router = require('react-router');
var React = require("react");
var url = require("fast-url-parser");
module.exports = function(routes) {
return function(req, res, next) {
var path = url.parse(req.url).pathname;
if (/^\/?api/i.test(path)) {
return next();
}
Router.run(routes, path, function(Handler, state) {
var markup = React.renderToString(<Handler routerState={state} />);
var locals = {markup: markup};
res.render("layouts/main", locals);
});
};
};
The routes
object (which describes the routes hierarchy) is shared verbatim with client and server
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With