Skip to content

Render isomorphic React + Redux apps and components in Node

Notifications You must be signed in to change notification settings

sequencemedia/react-redux-render

Repository files navigation

react-redux-render

Render isomorphic React apps and components in Node.

  • With Redux

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 {
  configureStore
} = require('./path/to/store')

const store = configureStore()

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

const App = require('./path/to/react/app')

app.get('/', (req, res) => res.send(renderToString(store, App)))

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

If renderToString encounters an error then it throws a 500 Internal Server Error. Otherwise, it returns a string.

You can supply App with props using the third argument:

renderToString(store, App, {})

(Since this is a Redux app you are unlikely to use props.)

In this package

react-redux-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-router-render for React Router apps (without Redux)
  3. @sequencemedia/react-render for React Redux apps (without React Router or Redux)