reactant-ssr
v0.149.0
Published
A server-side renderer for Reactant
Maintainers
Readme
reactant-ssr
SSR (Server-Side Rendering) can greatly improve the first rendering time, the most popular React SSR framework is Next.js. Currently, Reactant has supported SSR based on Next.js.
Installation
- Build a Next.js application project using the
create-next-appcli.
npx create-next-app reactant-ts-ssr --ts
cd reactant-ts-ssr- Install
reactant-ssr.
yarn add reactant-ssr- Install other
Babeldevelopment dependencies.
yarn add -D @babel/core @babel/plugin-proposal-class-properties @babel/plugin-proposal-decorators babel-plugin-parameter-decorator babel-plugin-transform-typescript-metadataConfiguration
- Next.js with Typescript should use
babel, and make sure you set:
Add .babelrc file
{
"presets": ["next/babel"],
"plugins": [
["@babel/plugin-proposal-decorators", { "legacy": true }],
["@babel/plugin-proposal-class-properties", { "loose": false }],
"babel-plugin-parameter-decorator",
"babel-plugin-transform-typescript-metadata"
]
}Add this config to tsconfig.json file
+ "experimentalDecorators": true,
+ "emitDecoratorMetadata": trueUsage
- Define a module file for SSR
src/index.tsx:
import React from 'react';
import {
ViewModule,
injectable,
useConnector,
action,
state,
} from 'reactant-ssr';
@injectable()
export class Counter {
@state
count = 0;
@action
increase() {
this.count += 1;
}
@action
decrease() {
this.count -= 1;
}
}
@injectable()
export class CounterView extends ViewModule {
constructor(public counter: Counter) {
super();
}
component() {
const count = useConnector(() => this.counter.count);
return (
<>
<button type="button" onClick={() => this.counter.decrease()}>
-
</button>
<div>{count}</div>
<button type="button" onClick={() => this.counter.increase()}>
+
</button>
</>
);
}
}- Add custom Next.js app in
pages/_app.tsxfile.
import { createServerApp } from "reactant-ssr";
import { CounterView } from "../src/index";
export const app = createServerApp({
modules: [CounterView],
});
export default app.bootstrap;- Add home page routing page in
pages/index.tsxfile.
import { CounterView } from "../src/index";
import { app } from "./_app";
export default app.container.get(CounterView).component;- run
yarn devand visithttp://localhost:3000.
Q&A
- Does
reactant-routersupport SSR?
reactant-router is based on React Router, which does not support SSR, so when you use reactant-ssr, your routing must usenext/router
- Does
reactant-storagesupport SSR?
Yes, it works perfectly fine. In general, reactant-share is a different application model, so it also does not support SSR, which is supported by all other Reactant libraries.
Example
Documentation
You can visit reactant.js.org for more documentation.
