Skip to content

Commit 4f8c16a

Browse files
authored
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.
1 parent 30c7c4f commit 4f8c16a

9 files changed

Lines changed: 21 additions & 20 deletions

File tree

scripts/fiber/tests-failing.txt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,6 @@ src/renderers/dom/shared/__tests__/ReactRenderDocument-test.js
3737
* should throw on full document render w/ no markup
3838
* supports findDOMNode on full-page components
3939

40-
src/renderers/dom/shared/wrappers/__tests__/ReactDOMInput-test.js
41-
* should control a value in reentrant events
42-
4340
src/renderers/shared/__tests__/ReactPerf-test.js
4441
* should count no-op update as waste
4542
* should count no-op update in child as waste

scripts/fiber/tests-passing.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -960,6 +960,7 @@ src/renderers/dom/shared/wrappers/__tests__/ReactDOMIframe-test.js
960960

961961
src/renderers/dom/shared/wrappers/__tests__/ReactDOMInput-test.js
962962
* should properly control a value even if no event listener exists
963+
* should control a value in reentrant events
963964
* should control values in reentrant events with different targets
964965
* should display `defaultValue` of number 0
965966
* only assigns defaultValue if it changes

src/renderers/dom/fiber/ReactDOMFiber.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ var {
4040
} = ReactDOMFiberComponent;
4141
var {
4242
precacheFiberNode,
43-
updateFiberEventHandlers,
43+
updateFiberProps,
4444
} = ReactDOMComponentTree;
4545

4646
if (__DEV__) {
@@ -188,7 +188,7 @@ var DOMRenderer = ReactFiberReconciler({
188188
}
189189
const domElement : Instance = createElement(type, props, rootContainerInstance, parentNamespace);
190190
precacheFiberNode(internalInstanceHandle, domElement);
191-
updateFiberEventHandlers(domElement, props);
191+
updateFiberProps(domElement, props);
192192
return domElement;
193193
},
194194

@@ -246,7 +246,7 @@ var DOMRenderer = ReactFiberReconciler({
246246
) : void {
247247
// Update the props handle so that we know which props are the ones with
248248
// with current event handlers.
249-
updateFiberEventHandlers(domElement, newProps);
249+
updateFiberProps(domElement, newProps);
250250
// Apply the diff to the DOM node.
251251
updateProperties(domElement, updatePayload, type, oldProps, newProps);
252252
},

src/renderers/dom/shared/ReactDOMComponentTree.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -221,11 +221,11 @@ function getNodeFromInstance(inst) {
221221
return inst._hostNode;
222222
}
223223

224-
function getFiberEventHandlersFromNode(node) {
224+
function getFiberCurrentPropsFromNode(node) {
225225
return node[internalEventHandlersKey] || null;
226226
}
227227

228-
function updateFiberEventHandlers(node, props) {
228+
function updateFiberProps(node, props) {
229229
node[internalEventHandlersKey] = props;
230230
}
231231

@@ -237,8 +237,8 @@ var ReactDOMComponentTree = {
237237
precacheNode: precacheNode,
238238
uncacheNode: uncacheNode,
239239
precacheFiberNode: precacheFiberNode,
240-
getFiberEventHandlersFromNode,
241-
updateFiberEventHandlers,
240+
getFiberCurrentPropsFromNode,
241+
updateFiberProps,
242242
};
243243

244244
module.exports = ReactDOMComponentTree;

src/renderers/native/ReactNativeComponentTree.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ function getFiberEventHandlersFromTag(tag) {
7070
return instanceProps[tag] || null;
7171
}
7272

73-
function updateFiberEventHandlers(tag, props) {
73+
function updateFiberProps(tag, props) {
7474
instanceProps[tag] = props;
7575
}
7676

@@ -82,8 +82,8 @@ var ReactNativeComponentTree = {
8282
precacheNode,
8383
uncacheFiberNode,
8484
uncacheNode,
85-
getFiberEventHandlersFromNode: getFiberEventHandlersFromTag,
86-
updateFiberEventHandlers,
85+
getFiberCurrentPropsFromNode: getFiberEventHandlersFromTag,
86+
updateFiberProps,
8787
};
8888

8989
module.exports = ReactNativeComponentTree;

src/renderers/native/ReactNativeFiber.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ const invariant = require('invariant');
3636
const {
3737
precacheFiberNode,
3838
uncacheFiberNode,
39-
updateFiberEventHandlers,
39+
updateFiberProps,
4040
} = ReactNativeComponentTree;
4141

4242
ReactNativeInjection.inject();
@@ -133,7 +133,7 @@ const NativeRenderer = ReactFiberReconciler({
133133
) : void {
134134
const viewConfig = instance.viewConfig;
135135

136-
updateFiberEventHandlers(instance._nativeTag, newProps);
136+
updateFiberProps(instance._nativeTag, newProps);
137137

138138
const updatePayload = ReactNativeAttributePayload.diff(
139139
oldProps,
@@ -181,7 +181,7 @@ const NativeRenderer = ReactFiberReconciler({
181181
const component = new NativeHostComponent(tag, viewConfig);
182182

183183
precacheFiberNode(internalInstanceHandle, tag);
184-
updateFiberEventHandlers(tag, props);
184+
updateFiberProps(tag, props);
185185

186186
return component;
187187
},

src/renderers/shared/shared/event/EventPluginHub.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ var EventPluginHub = {
126126
// TODO: shouldPreventMouseEvent is DOM-specific and definitely should not
127127
// live here; needs to be moved to a better place soon
128128
if (typeof inst.tag === 'number') {
129-
const props = EventPluginUtils.getFiberEventHandlersFromNode(
129+
const props = EventPluginUtils.getFiberCurrentPropsFromNode(
130130
inst.stateNode
131131
);
132132
if (!props) {

src/renderers/shared/shared/event/EventPluginUtils.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -219,8 +219,8 @@ var EventPluginUtils = {
219219
executeDispatchesInOrderStopAtTrue: executeDispatchesInOrderStopAtTrue,
220220
hasDispatches: hasDispatches,
221221

222-
getFiberEventHandlersFromNode: function(node) {
223-
return ComponentTree.getFiberEventHandlersFromNode(node);
222+
getFiberCurrentPropsFromNode: function(node) {
223+
return ComponentTree.getFiberCurrentPropsFromNode(node);
224224
},
225225
getInstanceFromNode: function(node) {
226226
return ComponentTree.getInstanceFromNode(node);

src/renderers/shared/shared/event/ReactControlledComponent.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,13 @@ function restoreStateOfTarget(target) {
4545
'Fiber needs to be injected to handle a fiber target for controlled ' +
4646
'events.'
4747
);
48+
const props = EventPluginUtils.getFiberCurrentPropsFromNode(
49+
internalInstance.stateNode
50+
);
4851
fiberHostComponent.restoreControlledState(
4952
internalInstance.stateNode,
5053
internalInstance.type,
51-
internalInstance.memoizedProps
54+
props
5255
);
5356
return;
5457
}

0 commit comments

Comments
 (0)