1.3.1 • Published 11 months ago
@appigram/react-code-split-ssr v1.3.1
React Code Split SSR
React code splitting with server side rendering
How it works
- React 19
- Based on React Router 7
- Server side: Load all components synchronously, then render to string.
- Client side: Load the initial component before rendering, render the entire screen synchronously, then load the rest of routes asynchronously.
Note: This packages is only tested in Meteor projects, but technically it can be used in any Nodejs projects. Here is an example with Meteor
Usage
$ npm i react-code-split-ssr --saveClient/server shared:
import { Bundle } from 'react-code-split-ssr';
import React from 'react';
const Home = () => <Bundle mod={import('/imports/modules/home')} />;
const Posts = () => <Bundle mod={import('/imports/modules/posts')} />;
export const routes = [
{ exact: true, path: '/', component: Home },
{ exact: true, path: '/posts', component: Posts },
];Client:
import React from 'react';
import { render } from 'react-dom';
import { matchPath } from 'react-router';
import { BrowserRouter, Route, Switch } from 'react-router-dom';
import { generateRoutes } from 'react-code-split-ssr';
import { routes, redirects } from '/imports/routes';
// import some components...
/* In an async function */
const Routes = await generateRoutes({
routes,
redirects,
notFoundComp: NotFound,
pathname: window.location.pathname,
});
render(
<BrowserRouter>
<Layout>
<Routes />
</Layout>
</BrowserRouter>,
document.getElementById('app')
);Server:
import { Route, StaticRouter, Switch } from 'react-router';
import React from 'react';
import { renderToString } from 'react-dom/server';
import { generateRoutes } from 'react-code-split-ssr';
import { routes, redirects } from '/imports/routes';
// import some components...
/* In an async server router */
const Routes = await generateRoutes({
routes,
redirects,
notFoundComp: NotFound,
pathname: req.url,
});
const ServerRoutes = ({ url, context = {} }) => (
<StaticRouter location={url.pathname} context={context}>
<Layout>
<Routes />
</Layout>
</StaticRouter>
);
const bodyHtmlString = renderToString(<ServerRoutes url={sink.request.url} />);
// Use bodyHtmlString to where you needAPI
Bundle - React Component \<Bundle>
Props
- mod {Promise} Required - A
Promiseobject which can be resolved to React Component - loading {Component} - A React Component
generateRoutes - Func (object: Options)
A function that returns a Promise object which can be resolved to React Router routes wrapped in <Switch>
Options
- pathname {string} Required - Pathname for initial loading
- routes {objects}[] Required - An array of
<Route>props objectcomponentfield only accepts() => <Bundle/>location,renderfields are currently not supported
- redirects {objects}[] - An array of
<Redirect>props object - notFoundComp {Component} - A React component for 404 Not Found, only accepts
() => <Bundle/>
v1.3.0
- Upgrade to React-Router 7 and React 19
v1.2.0
- Remove redirects, Fix React-Router v6 specific rendering
v1.1.0
- Upgrade to React-Router v6
v1.0.0
- SSR correctly for redirected routes
- Change
notFoundCompto() => <Bundle /> - Add more argument validations
1.3.1
11 months ago
1.3.0
11 months ago
1.2.16
2 years ago
1.2.15
2 years ago
1.2.12
2 years ago
1.2.13
2 years ago
1.2.14
2 years ago
1.2.11
2 years ago
1.2.10
3 years ago
1.2.9
3 years ago
1.2.8
3 years ago
1.2.7
4 years ago
1.2.6
4 years ago
1.2.5
4 years ago
1.2.4
4 years ago
1.2.3
4 years ago
1.2.2
4 years ago
1.2.0
4 years ago
1.2.1
4 years ago
1.2.0-beta.1
4 years ago
1.2.0-beta.0
4 years ago
1.2.0-beta.3
4 years ago
1.2.0-beta.2
4 years ago
1.2.0-beta.5
4 years ago
1.2.0-beta.4
4 years ago
1.2.0-beta.7
4 years ago
1.2.0-beta.6
4 years ago
1.1.3
4 years ago
1.1.2
4 years ago
1.1.1
5 years ago
1.1.0
5 years ago
1.0.16
5 years ago
1.0.15
5 years ago
1.0.14
5 years ago
1.0.13
5 years ago
1.0.12
5 years ago
1.0.11
6 years ago
1.0.10
6 years ago
1.0.9
6 years ago
1.0.8
6 years ago
1.0.6
6 years ago
1.0.5
6 years ago
1.0.4
6 years ago
1.0.3
6 years ago
1.0.2
6 years ago
1.0.1
6 years ago
1.0.0
6 years ago