@samitouri / QOS-React-2 / commits / 4f8c16a750

Read "current" props from the node instead of the Fiber (#8839)

It's not just events that read the current props. Controlled components do as well. Since we're no longer updating the Fiber pointer during updates we have to instead read from the node props to get the current props. Since this method is no longer just used for events I renamed it.

Sebastian Markbåge committed Jan 20, 2017 at 23:25 UTC 4f8c16a750916f4eb250e22575fc6dbc6ae2bd9c
9 files changed +21 -20
scripts/fiber/tests-failing.txt
-3
@@ -37,9 +37,6 @@ src/renderers/dom/shared/__tests__/ReactRenderDocument-test.js
37 * should throw on full document render w/ no markup
38 * supports findDOMNode on full-page components
39
40 -src/renderers/dom/shared/wrappers/__tests__/ReactDOMInput-test.js
41 -* should control a value in reentrant events
42 -
40 src/renderers/shared/__tests__/ReactPerf-test.js
41 * should count no-op update as waste
42 * should count no-op update in child as waste
scripts/fiber/tests-passing.txt
+1
@@ -960,6 +960,7 @@ src/renderers/dom/shared/wrappers/__tests__/ReactDOMIframe-test.js
960
961 src/renderers/dom/shared/wrappers/__tests__/ReactDOMInput-test.js
962 * should properly control a value even if no event listener exists
963 +* should control a value in reentrant events
964 * should control values in reentrant events with different targets
965 * should display `defaultValue` of number 0
966 * only assigns defaultValue if it changes
src/renderers/dom/fiber/ReactDOMFiber.js
+3 -3
@@ -40,7 +40,7 @@ var {
40 } = ReactDOMFiberComponent;
41 var {
42 precacheFiberNode,
43 - updateFiberEventHandlers,
43 + updateFiberProps,
44 } = ReactDOMComponentTree;
45
46 if (__DEV__) {
@@ -188,7 +188,7 @@ var DOMRenderer = ReactFiberReconciler({
188 }
189 const domElement : Instance = createElement(type, props, rootContainerInstance, parentNamespace);
190 precacheFiberNode(internalInstanceHandle, domElement);
191 - updateFiberEventHandlers(domElement, props);
191 + updateFiberProps(domElement, props);
192 return domElement;
193 },
194
@@ -246,7 +246,7 @@ var DOMRenderer = ReactFiberReconciler({
246 ) : void {
247 // Update the props handle so that we know which props are the ones with
248 // with current event handlers.
249 - updateFiberEventHandlers(domElement, newProps);
249 + updateFiberProps(domElement, newProps);
250 // Apply the diff to the DOM node.
251 updateProperties(domElement, updatePayload, type, oldProps, newProps);
252 },
src/renderers/dom/shared/ReactDOMComponentTree.js
+4 -4
@@ -221,11 +221,11 @@ function getNodeFromInstance(inst) {
221 return inst._hostNode;
222 }
223
224 -function getFiberEventHandlersFromNode(node) {
224 +function getFiberCurrentPropsFromNode(node) {
225 return node[internalEventHandlersKey] || null;
226 }
227
228 -function updateFiberEventHandlers(node, props) {
228 +function updateFiberProps(node, props) {
229 node[internalEventHandlersKey] = props;
230 }
231
@@ -237,8 +237,8 @@ var ReactDOMComponentTree = {
237 precacheNode: precacheNode,
238 uncacheNode: uncacheNode,
239 precacheFiberNode: precacheFiberNode,
240 - getFiberEventHandlersFromNode,
241 - updateFiberEventHandlers,
240 + getFiberCurrentPropsFromNode,
241 + updateFiberProps,
242 };
243
244 module.exports = ReactDOMComponentTree;
src/renderers/native/ReactNativeComponentTree.js
+3 -3
@@ -70,7 +70,7 @@ function getFiberEventHandlersFromTag(tag) {
70 return instanceProps[tag] || null;
71 }
72
73 -function updateFiberEventHandlers(tag, props) {
73 +function updateFiberProps(tag, props) {
74 instanceProps[tag] = props;
75 }
76
@@ -82,8 +82,8 @@ var ReactNativeComponentTree = {
82 precacheNode,
83 uncacheFiberNode,
84 uncacheNode,
85 - getFiberEventHandlersFromNode: getFiberEventHandlersFromTag,
86 - updateFiberEventHandlers,
85 + getFiberCurrentPropsFromNode: getFiberEventHandlersFromTag,
86 + updateFiberProps,
87 };
88
89 module.exports = ReactNativeComponentTree;
src/renderers/native/ReactNativeFiber.js
+3 -3
@@ -36,7 +36,7 @@ const invariant = require('invariant');
36 const {
37 precacheFiberNode,
38 uncacheFiberNode,
39 - updateFiberEventHandlers,
39 + updateFiberProps,
40 } = ReactNativeComponentTree;
41
42 ReactNativeInjection.inject();
@@ -133,7 +133,7 @@ const NativeRenderer = ReactFiberReconciler({
133 ) : void {
134 const viewConfig = instance.viewConfig;
135
136 - updateFiberEventHandlers(instance._nativeTag, newProps);
136 + updateFiberProps(instance._nativeTag, newProps);
137
138 const updatePayload = ReactNativeAttributePayload.diff(
139 oldProps,
@@ -181,7 +181,7 @@ const NativeRenderer = ReactFiberReconciler({
181 const component = new NativeHostComponent(tag, viewConfig);
182
183 precacheFiberNode(internalInstanceHandle, tag);
184 - updateFiberEventHandlers(tag, props);
184 + updateFiberProps(tag, props);
185
186 return component;
187 },
src/renderers/shared/shared/event/EventPluginHub.js
+1 -1
@@ -126,7 +126,7 @@ var EventPluginHub = {
126 // TODO: shouldPreventMouseEvent is DOM-specific and definitely should not
127 // live here; needs to be moved to a better place soon
128 if (typeof inst.tag === 'number') {
129 - const props = EventPluginUtils.getFiberEventHandlersFromNode(
129 + const props = EventPluginUtils.getFiberCurrentPropsFromNode(
130 inst.stateNode
131 );
132 if (!props) {
src/renderers/shared/shared/event/EventPluginUtils.js
+2 -2
@@ -219,8 +219,8 @@ var EventPluginUtils = {
219 executeDispatchesInOrderStopAtTrue: executeDispatchesInOrderStopAtTrue,
220 hasDispatches: hasDispatches,
221
222 - getFiberEventHandlersFromNode: function(node) {
223 - return ComponentTree.getFiberEventHandlersFromNode(node);
222 + getFiberCurrentPropsFromNode: function(node) {
223 + return ComponentTree.getFiberCurrentPropsFromNode(node);
224 },
225 getInstanceFromNode: function(node) {
226 return ComponentTree.getInstanceFromNode(node);
src/renderers/shared/shared/event/ReactControlledComponent.js
+4 -1
@@ -45,10 +45,13 @@ function restoreStateOfTarget(target) {
45 'Fiber needs to be injected to handle a fiber target for controlled ' +
46 'events.'
47 );
48 + const props = EventPluginUtils.getFiberCurrentPropsFromNode(
49 + internalInstance.stateNode
50 + );
51 fiberHostComponent.restoreControlledState(
52 internalInstance.stateNode,
53 internalInstance.type,
51 - internalInstance.memoizedProps
54 + props
55 );
56 return;
57 }