Skip to content

Commit

Permalink
fixed ssr example
Browse files Browse the repository at this point in the history
  • Loading branch information
vzaidman committed Dec 29, 2024
1 parent 6c617d6 commit 5e927f2
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 15 deletions.
5 changes: 2 additions & 3 deletions demo/serve.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,10 @@ if (!port) {
const app = express();

app.get('/ssrComponent', (req, res) => {
const stream = ReactDomServer.renderToNodeStream(
const html = ReactDomServer.renderToString(
React.createElement(DemoComponent, {text: 'hydrated hi'})
);
stream.pipe(res, {end: false});
stream.on('end', () => res.end());
res.send(html);
});

const server = http.createServer(app);
Expand Down
17 changes: 11 additions & 6 deletions demo/src/App.js
Original file line number Diff line number Diff line change
Expand Up @@ -54,13 +54,18 @@ const defaultDemoName = 'bigList';
const domElement = document.getElementById('demo');
let reactDomRoot;

function changeDemo(demoFn) {
function changeDemo(demoFn, {shouldCreateRoot = true} = {}) {
console.clear && console.clear(); // eslint-disable-line no-console
React.__REVERT_WHY_DID_YOU_RENDER__ && React.__REVERT_WHY_DID_YOU_RENDER__();
reactDomRoot?.unmount();
reactDomRoot = ReactDom.createRoot(domElement);
if (shouldCreateRoot) {
reactDomRoot = ReactDom.createRoot(domElement);
}
setTimeout(() => {
demoFn({whyDidYouRender, reactDomRoot});
const reactDomRootPromise = demoFn({whyDidYouRender, domElement, reactDomRoot});
if (reactDomRootPromise) {
reactDomRootPromise.then(r => reactDomRoot = r);
}
}, 1);
}

Expand All @@ -70,10 +75,10 @@ if (!demoFromHash) {
window.location.hash = defaultDemoName;
}

changeDemo(initialDemo.fn);
changeDemo(initialDemo.fn, initialDemo.settings);

const DemoLink = ({name, description, fn}) => (
<li><a href={`#${name}`} onClick={() => changeDemo(fn)}>{description}</a></li>
const DemoLink = ({name, description, fn, settings}) => (
<li><a href={`#${name}`} onClick={() => changeDemo(fn, settings)}>{description}</a></li>
);

const App = () => (
Expand Down
17 changes: 11 additions & 6 deletions demo/src/ssr/index.js
Original file line number Diff line number Diff line change
@@ -1,27 +1,32 @@
import React from 'react';
import ReactDom from 'react-dom';
import ReactDom from 'react-dom/client';

import createStepLogger from '../createStepLogger';

import DemoComponent from './DemoComponent';

export default {
description: 'Server Side (hydrate)',
fn({reactDomRoot, domElement, whyDidYouRender}) {
fn({domElement, whyDidYouRender}) {
const stepLogger = createStepLogger();

fetch('/ssrComponent')
return fetch('/ssrComponent')
.then(response => response.text())
.then(initialDemoHTML => {
domElement.innerHTML = initialDemoHTML;

whyDidYouRender(React);

stepLogger('hydrate');
ReactDom.hydrate(<DemoComponent text="hydrated hi"/>, domElement);
const hydratedRoot = ReactDom.hydrateRoot(domElement, <DemoComponent text="hydrated hi"/>);

stepLogger('render with same props', true);
reactDomRoot.render(<DemoComponent text="hydrated hi"/>);
setTimeout(() => {
stepLogger('render with same props', true);
hydratedRoot.render(<DemoComponent text="hydrated hi"/>);
}, 1);

return hydratedRoot;
});
},
settings: {shouldCreateRoot: false},
};

0 comments on commit 5e927f2

Please sign in to comment.