diff --git a/src/Resolver.js b/src/Resolver.js index 0c1b62d..426bf60 100644 --- a/src/Resolver.js +++ b/src/Resolver.js @@ -1,8 +1,14 @@ /* eslint-disable no-underscore-dangle */ import React from "react"; -import ReactDOM from "react-dom"; -import {renderToStaticMarkup} from "react-dom/server"; + +// react-dom seems to be clashing with react-native, no idea why +// so I'll just comment them out to make it work in react-native. +//import ReactDOM from "react-dom"; +//import {renderToStaticMarkup} from "react-dom/server"; + +let ReactDOM; +let renderToStaticMarkup const ID = "ReactResolver.ID"; const CHILDREN = "ReactResolver.CHILDREN"; @@ -10,6 +16,16 @@ const HAS_RESOLVED = "ReactResolver.HAS_RESOLVED"; const IS_CLIENT = "ReactResolver.IS_CLIENT"; const PAYLOAD = "__REACT_RESOLVER_PAYLOAD__"; +/** + * Check if we're running under a ReactNative enviroment; + * @return {boolean} + * + * https://stackoverflow.com/questions/39468022/how-do-i-know-if-my-code-is-running-as-react-native + */ +function isReactNative() { + return (typeof navigator != 'undefined' && navigator.product == 'ReactNative'); +} + export default class Resolver extends React.Component { static childContextTypes = { resolver: React.PropTypes.instanceOf(Resolver), @@ -47,14 +63,16 @@ export default class Resolver extends React.Component { static resolve = function(render, initialData = {}) { const queue = []; - renderToStaticMarkup( - { - queue.push(promise); - return Promise.resolve(true); - })}> - {render} - - ); + if (!isReactNative()) { + renderToStaticMarkup( + { + queue.push(promise); + return Promise.resolve(true); + })}> + {render} + + ); + } return Promise.all(queue).then((results) => { const data = { ...initialData };