<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<div data-ng-app="angular.Module"></div>
</body>
</html>
export default () => {
const [random, setRandom] = useState(Math.random().toString());
useEffect(() => {
let interval: number | undefined;
interval = window.setInterval(() => {
setRandom(Math.random().toString());
}, 1000);
return () => window.clearInterval(interval);
});
return <h1>Hello {random}! Nice SSR we got here!</h1>
};
ReactDOMServer.renderToString(<Hello />);
ReactDOM.hydrate(<Hello />, document.getElementById('root'));
[demo]
POST http://localhost:9092/batch
{
"content": {
"name": "Hello",
"data": {
"welcome": "Hallo"
}
}
}
{
"content": {
"name": "Tiles",
"data": {
}
}
}
[demo]
module.exports.batch = (event, context, callback) => {
hypernova(
event,
{
getComponent(name) {
switch (name) {
case 'Tiles':
return renderComponent(renderReactWithApollo, name);
case 'Search':
return renderComponent(renderVue, name);
default:
return null;
}
}
},
callback
);
};
module.exports.home = async (event) => {
const name = 'Morty';
const jobs = {
Search: {
input: name
},
Tiles: {
name
}
};
return {
statusCode: 200,
headers: {
'Content-Type': 'text/html'
},
body: html(await renderer.render(jobs))
};
};
[demo]
hypernova-vue
hypernova-lambda