aboutsummaryrefslogtreecommitdiff
path: root/node_modules/react-dom/lib/ReactDOMFiber.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/react-dom/lib/ReactDOMFiber.js')
-rw-r--r--node_modules/react-dom/lib/ReactDOMFiber.js97
1 files changed, 97 insertions, 0 deletions
diff --git a/node_modules/react-dom/lib/ReactDOMFiber.js b/node_modules/react-dom/lib/ReactDOMFiber.js
new file mode 100644
index 000000000..ac9a2180a
--- /dev/null
+++ b/node_modules/react-dom/lib/ReactDOMFiber.js
@@ -0,0 +1,97 @@
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ *
+ *
+ */
+
+'use strict';
+
+var ReactFiberReconciler = require('./ReactFiberReconciler');
+
+var warning = require('fbjs/lib/warning');
+
+function recursivelyAppendChildren(parent, child) {
+ if (!child) {
+ return;
+ }
+ /* $FlowFixMe: Element should have this property. */
+ if (child.nodeType === 1) {
+ /* $FlowFixMe: Refinement issue. I don't know how to express different. */
+ parent.appendChild(child);
+ } else {
+ /* As a result of the refinement issue this type isn't known. */
+ var node = child;
+ do {
+ recursivelyAppendChildren(parent, node.output);
+ } while (node = node.sibling);
+ }
+}
+
+var DOMRenderer = ReactFiberReconciler({
+ updateContainer: function (container, children) {
+ container.innerHTML = '';
+ recursivelyAppendChildren(container, children);
+ },
+ createInstance: function (type, props, children) {
+ var domElement = document.createElement(type);
+ recursivelyAppendChildren(domElement, children);
+ if (typeof props.children === 'string') {
+ domElement.textContent = props.children;
+ }
+ return domElement;
+ },
+ prepareUpdate: function (domElement, oldProps, newProps, children) {
+ return true;
+ },
+ commitUpdate: function (domElement, oldProps, newProps, children) {
+ domElement.innerHTML = '';
+ recursivelyAppendChildren(domElement, children);
+ if (typeof newProps.children === 'string') {
+ domElement.textContent = newProps.children;
+ }
+ },
+ deleteInstance: function (instance) {
+ // Noop
+ },
+
+
+ scheduleAnimationCallback: window.requestAnimationFrame,
+
+ scheduleDeferredCallback: window.requestIdleCallback
+
+});
+
+var warned = false;
+
+function warnAboutUnstableUse() {
+ process.env.NODE_ENV !== 'production' ? warning(warned, 'You are using React DOM Fiber which is an experimental renderer. ' + 'It is likely to have bugs, breaking changes and is unsupported.') : void 0;
+ warned = true;
+}
+
+var ReactDOM = {
+ render: function (element, container) {
+ warnAboutUnstableUse();
+ if (!container._reactRootContainer) {
+ container._reactRootContainer = DOMRenderer.mountContainer(element, container);
+ } else {
+ DOMRenderer.updateContainer(element, container._reactRootContainer);
+ }
+ },
+ unmountComponentAtNode: function (container) {
+ warnAboutUnstableUse();
+ var root = container._reactRootContainer;
+ if (root) {
+ // TODO: Is it safe to reset this now or should I wait since this
+ // unmount could be deferred?
+ container._reactRootContainer = null;
+ DOMRenderer.unmountContainer(root);
+ }
+ }
+};
+
+module.exports = ReactDOM; \ No newline at end of file