diff --git a/Changelog.md b/Changelog.md index c714dba71d..048b725d22 100644 --- a/Changelog.md +++ b/Changelog.md @@ -8,6 +8,19 @@ refetching.
[@steelbrain](https://github.com/steelbrain) in [#2493](https://github.com/apollographql/react-apollo/pull/2493) +### Improvements + +- Reimplement `getDataFromTree` using `ReactDOM.renderToStaticMarkup` to + make asynchronous server-side rendering compatible with + [React hooks](https://reactjs.org/docs/hooks-intro.html). + Although the rendering function used by `getDataFromTree` defaults to + `renderToStaticMarkup`, any suitable rendering function can be passed as + the optional second argument to `getDataFromTree`, which now returns a + `Promise` that resolves to The HTML rendered in the final pass, + which means calling `renderToString` after `getDataFromTree` may not be + necessary anymore. + [PR #2533](https://github.com/apollographql/react-apollo/pull/2533) + ## 2.2.4 (October 2, 2018) ### Bug Fixes diff --git a/examples/ssr/.meteor/packages b/examples/ssr/.meteor/packages index 0a43c80c30..6822743386 100644 --- a/examples/ssr/.meteor/packages +++ b/examples/ssr/.meteor/packages @@ -6,15 +6,15 @@ meteor-base@1.4.0 # Packages every Meteor app needs to have mobile-experience@1.0.5 # Packages for a great mobile UX -mongo@1.5.0 # The database Meteor supports right now +mongo@1.6.0 # The database Meteor supports right now static-html # Define static page content in .html files reactive-var@1.0.11 # Reactive variable for tracker tracker@1.2.0 # Meteor's client-side reactive programming library -standard-minifier-css@1.4.1 # CSS minifier run for production mode -standard-minifier-js@2.3.4 # JS minifier run for production mode +standard-minifier-css@1.5.0 # CSS minifier run for production mode +standard-minifier-js@2.4.0 # JS minifier run for production mode es5-shim@4.8.0 # ECMAScript 5 compatibility for older browsers -ecmascript@0.11.1 # Enable ECMAScript2015+ syntax in app code -shell-server@0.3.1 # Server-side component of the `meteor shell` command +ecmascript@0.12.0 # Enable ECMAScript2015+ syntax in app code +shell-server@0.4.0 # Server-side component of the `meteor shell` command server-render@0.3.1 -underscore +underscore@1.0.10 diff --git a/examples/ssr/.meteor/release b/examples/ssr/.meteor/release index 4c71956e25..e76dedee10 100644 --- a/examples/ssr/.meteor/release +++ b/examples/ssr/.meteor/release @@ -1 +1 @@ -METEOR@1.7.0.5 +METEOR@1.8 diff --git a/examples/ssr/.meteor/versions b/examples/ssr/.meteor/versions index f0b53ee444..6b7992c8c4 100644 --- a/examples/ssr/.meteor/versions +++ b/examples/ssr/.meteor/versions @@ -1,12 +1,12 @@ allow-deny@1.1.0 -autoupdate@1.4.1 -babel-compiler@7.1.1 -babel-runtime@1.2.7 +autoupdate@1.5.0 +babel-compiler@7.2.1 +babel-runtime@1.3.0 base64@1.0.11 -binary-heap@1.0.10 +binary-heap@1.0.11 blaze-tools@1.0.10 -boilerplate-generator@1.5.0 -caching-compiler@1.1.12 +boilerplate-generator@1.6.0 +caching-compiler@1.2.0 caching-html-compiler@1.1.3 callback-hook@1.1.0 check@1.3.1 @@ -16,53 +16,54 @@ ddp-common@1.4.0 ddp-server@2.2.0 deps@1.0.12 diff-sequence@1.1.0 -dynamic-import@0.4.2 -ecmascript@0.11.1 +dynamic-import@0.5.0 +ecmascript@0.12.1 ecmascript-runtime@0.7.0 -ecmascript-runtime-client@0.7.2 +ecmascript-runtime-client@0.8.0 ecmascript-runtime-server@0.7.1 ejson@1.1.0 es5-shim@4.8.0 +fetch@0.1.0 geojson-utils@1.0.10 hot-code-push@1.0.4 html-tools@1.0.11 htmljs@1.0.11 -http@1.4.1 id-map@1.1.0 +inter-process-messaging@0.1.0 launch-screen@1.1.1 livedata@1.0.18 logging@1.1.20 meteor@1.9.2 meteor-base@1.4.0 -minifier-css@1.3.1 -minifier-js@2.3.5 +minifier-css@1.4.0 +minifier-js@2.4.0 minimongo@1.4.5 mobile-experience@1.0.5 mobile-status-bar@1.0.14 modern-browsers@0.1.2 -modules@0.12.2 -modules-runtime@0.10.2 -mongo@1.5.1 +modules@0.13.0 +modules-runtime@0.10.3 +mongo@1.6.0 +mongo-decimal@0.1.0 mongo-dev-server@1.1.0 mongo-id@1.0.7 -npm-mongo@3.0.11 +npm-mongo@3.1.1 ordered-dict@1.1.0 promise@0.11.1 random@1.1.0 reactive-var@1.0.11 reload@1.2.0 retry@1.1.0 -routepolicy@1.0.13 +routepolicy@1.1.0 server-render@0.3.1 -shell-server@0.3.1 +shell-server@0.4.0 socket-stream-client@0.2.2 spacebars-compiler@1.1.3 -standard-minifier-css@1.4.1 -standard-minifier-js@2.3.4 +standard-minifier-css@1.5.1 +standard-minifier-js@2.4.0 static-html@1.2.2 templating-tools@1.1.2 tracker@1.2.0 underscore@1.0.10 -url@1.2.0 -webapp@1.6.2 +webapp@1.7.0 webapp-hashing@1.0.9 diff --git a/examples/ssr/package.json b/examples/ssr/package.json index febd0decad..607af6d9e2 100644 --- a/examples/ssr/package.json +++ b/examples/ssr/package.json @@ -7,9 +7,9 @@ "visualize": "meteor --production --extra-packages bundle-visualizer" }, "dependencies": { - "@babel/runtime": "7.1.2", - "apollo-cache-inmemory": "^1.2.10", - "apollo-client": "^2.4.2", + "@babel/runtime": "^7.1.2", + "apollo-cache-inmemory": "^1.3.7", + "apollo-client": "^2.4.4", "apollo-link-http": "^1.5.5", "apollo-server": "^2.1.0", "apollo-server-express": "^2.1.0", diff --git a/examples/ssr/server/main.js b/examples/ssr/server/main.js index ffa998b9b0..485cebc056 100644 --- a/examples/ssr/server/main.js +++ b/examples/ssr/server/main.js @@ -27,10 +27,11 @@ export const render = async sink => { ); + const start = +new Date; // Load all data from local server await getDataFromTree(WrappedApp); - const body = renderToString(WrappedApp); + console.log("server rendering took", new Date - start, "ms"); sink.renderIntoElementById('app', body); sink.appendToBody(`