@sequencemedia/react-router-render

Sync/async isomorphic render of React apps with React Router

Downloads in past

Stats

StarsIssuesVersionUpdatedCreatedSize
@sequencemedia/react-router-render
302.0.365a day ago4 years agoMinified + gzip package size for @sequencemedia/react-router-render in KB

Readme

react-router-render
Render isomorphic React apps and components in Node.
  • Using React Router

Compatible with React Router 5.
An example implementation of the companion package @sequencemedia/react-router-redux-render can be found in react-router-pagination-io.

Example

In Express:
const express = require('express')

const app = express()
const port = 3000

const routes = require('./path/to/routes')

const {
  renderToString
} = require('react-router-render')

app.get('/', ({ url: { path: pathname = '/' } }, res) => res.send(renderToString(routes, pathname)))

app.listen(port, () => console.log(`Express ${port}`))

If React Router matches the pathname to a <Route /> then renderToString returns a string.
If renderToString encounters an error then it throws a 500 Internal Server Error.
If renderToString cannot match the pathname to a <Route /> then it throws a 404 Not Found.

In this package

react-router-render exports three functions:
  1. renderToString
  2. renderToStaticMarkup
  3. render

renderToString generates <html /> including the attributes that React uses in ReactDOM.hydrate(). It implements ReactDOMServer.renderToString().
renderToStaticMarkup doesn't include those attributes. It's useful for using React as a rendering engine for static pages. It implements ReactDOMServer.renderToStaticMarkup().
render executes renderToString but returns a Promise which resolves to a string.

Companion packages

  1. @sequencemedia/react-router-redux-render for React Router apps (with Redux)
  2. @sequencemedia/react-redux-render for React Redux apps (without React Router)
  3. @sequencemedia/react-render for React apps (without React Router or Redux)