Server Side Rendering
Preload Data
Preloading data is a common step to in serverside rendering. How it is done differs based on whether you are using Real Time Database or Firestore.
Real Time Database
promiseEvents
, which is similar to firebaseConnect
expected it is presented as a function instead of a React Component.
After creating your store:
store.firebase
.promiseEvents([
{ path: 'todos' },
{ path: 'users' }
])
.then(() => {
console.log('data is loaded into redux store')
})
Firestore Its just as simple as calling the built in get method with your query config:
store.firestore.get({ collection: 'todos' }) // or .get('todos')
.then(() => {
console.log('data is loaded into redux store')
})
Troubleshooting
Include XMLHttpRequest
// needed to fix "Error: The XMLHttpRequest compatibility library was not found."
global.XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest
If you find adding this extra code to be an annoyance or you would like to discuss a different way to do it, please feel free to open an issue/pull request or reach out on gitter.
Implement with Webpack
Make Sure Loaders are setup appropriately
Note, make sure that you have excluded node_modules
in your webpack loaders
// webpack 1
exclude: /node_modules/,
// or webpack 2/3
options: { presets: [ [ 'es2015', { modules: false } ] ] }