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(`