lib/assets/javascripts/react_ujs.js in react-rails-2.4.2 vs lib/assets/javascripts/react_ujs.js in react-rails-2.4.3
- old
+ new
@@ -238,10 +238,13 @@
// This attribute holds JSON stringified props for initializing the component
// example: `data-react-props="{\"item\": { \"id\": 1, \"name\": \"My Item\"} }"`
PROPS_ATTR: 'data-react-props',
+ // This attribute holds which method to use between: ReactDOM.hydrate, ReactDOM.render
+ RENDER_ATTR: 'data-hydrate',
+
// If jQuery is detected, save a reference to it for event handlers
jQuery: (typeof window !== 'undefined') && (typeof window.jQuery !== 'undefined') && window.jQuery,
// helper method for the mount and unmount methods to find the
// `data-react-class` DOM elements
@@ -305,18 +308,19 @@
var node = nodes[i];
var className = node.getAttribute(ujs.CLASS_NAME_ATTR);
var constructor = ujs.getConstructor(className);
var propsJson = node.getAttribute(ujs.PROPS_ATTR);
var props = propsJson && JSON.parse(propsJson);
+ var hydrate = node.getAttribute(ujs.RENDER_ATTR);
if (!constructor) {
var message = "Cannot find component: '" + className + "'"
if (console && console.log) {
console.log("%c[react-rails] %c" + message + " for element", "font-weight: bold", "", node)
}
throw new Error(message + ". Make sure your component is available to render.")
} else {
- if (typeof ReactDOM.hydrate === "function") {
+ if (hydrate && typeof ReactDOM.hydrate === "function") {
ReactDOM.hydrate(React.createElement(constructor, props), node);
} else {
ReactDOM.render(React.createElement(constructor, props), node);
}
}
\ No newline at end of file