Skip to content

Commit 75825ff

Browse files
committed
Don't update textarea defaultValue and input checked unnecessarily (#26580)
In #26573 I changed it so that textareas get their defaultValue reset if you don't specify one. However, the way that was implemented, it always set it for any update even if it hasn't changed. We have a test for that, but that test only works if no properties update at all so that no update was scheduled. This fixes the test so that it updates some unrelated prop. I also found a test for `checked` that needed a similar fix. Interestingly, we don't do this deduping for `defaultValue` or `defaultChecked` on inputs and there's no test for that. DiffTrain build for [9a9da77](9a9da77)
1 parent bdd6ae3 commit 75825ff

15 files changed

+362
-312
lines changed

compiled/facebook-www/REVISION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
e5146cb5250be1a4e66511af91549859b36ed488
1+
9a9da7721e5b73a8af242807e463e2af842c58ee

compiled/facebook-www/React-dev.modern.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ if (
2727
}
2828
"use strict";
2929

30-
var ReactVersion = "18.3.0-www-modern-a9e6dcdb";
30+
var ReactVersion = "18.3.0-www-modern-bfaf8fe7";
3131

3232
// ATTENTION
3333
// When adding new symbols to this file,

compiled/facebook-www/ReactART-dev.classic.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ function _assertThisInitialized(self) {
6969
return self;
7070
}
7171

72-
var ReactVersion = "18.3.0-www-classic-6b173260";
72+
var ReactVersion = "18.3.0-www-classic-4f49fe42";
7373

7474
var LegacyRoot = 0;
7575
var ConcurrentRoot = 1;

compiled/facebook-www/ReactART-prod.modern.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9737,7 +9737,7 @@ var slice = Array.prototype.slice,
97379737
return null;
97389738
},
97399739
bundleType: 0,
9740-
version: "18.3.0-www-modern-e257717e",
9740+
version: "18.3.0-www-modern-3b22d407",
97419741
rendererPackageName: "react-art"
97429742
};
97439743
var internals$jscomp$inline_1324 = {
@@ -9768,7 +9768,7 @@ var internals$jscomp$inline_1324 = {
97689768
scheduleRoot: null,
97699769
setRefreshHandler: null,
97709770
getCurrentFiber: null,
9771-
reconcilerVersion: "18.3.0-www-modern-e257717e"
9771+
reconcilerVersion: "18.3.0-www-modern-3b22d407"
97729772
};
97739773
if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) {
97749774
var hook$jscomp$inline_1325 = __REACT_DEVTOOLS_GLOBAL_HOOK__;

compiled/facebook-www/ReactDOM-dev.classic.js

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3806,7 +3806,7 @@ function updateInputChecked(element, props) {
38063806
var node = element;
38073807
var checked = props.checked;
38083808

3809-
if (checked != null) {
3809+
if (checked != null && node.checked !== !!checked) {
38103810
node.checked = checked;
38113811
}
38123812
}
@@ -4360,13 +4360,6 @@ function validateTextareaProps(element, props) {
43604360
function updateTextarea(element, props) {
43614361
var node = element;
43624362
var value = getToStringValue(props.value);
4363-
var defaultValue = getToStringValue(props.defaultValue);
4364-
4365-
if (defaultValue != null) {
4366-
node.defaultValue = toString(defaultValue);
4367-
} else {
4368-
node.defaultValue = "";
4369-
}
43704363

43714364
if (value != null) {
43724365
// Cast `value` to a string to ensure the value is set correctly. While
@@ -4377,10 +4370,22 @@ function updateTextarea(element, props) {
43774370
node.value = newValue;
43784371
} // TOOO: This should respect disableInputAttributeSyncing flag.
43794372

4380-
if (props.defaultValue == null && node.defaultValue !== newValue) {
4381-
node.defaultValue = newValue;
4373+
if (props.defaultValue == null) {
4374+
if (node.defaultValue !== newValue) {
4375+
node.defaultValue = newValue;
4376+
}
4377+
4378+
return;
43824379
}
43834380
}
4381+
4382+
var defaultValue = getToStringValue(props.defaultValue);
4383+
4384+
if (defaultValue != null) {
4385+
node.defaultValue = toString(defaultValue);
4386+
} else {
4387+
node.defaultValue = "";
4388+
}
43844389
}
43854390
function initTextarea(element, props) {
43864391
var node = element;
@@ -33343,7 +33348,7 @@ function createFiberRoot(
3334333348
return root;
3334433349
}
3334533350

33346-
var ReactVersion = "18.3.0-www-classic-6714ccf8";
33351+
var ReactVersion = "18.3.0-www-classic-1bf554dd";
3334733352

3334833353
function createPortal$1(
3334933354
children,

compiled/facebook-www/ReactDOM-dev.modern.js

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3640,7 +3640,7 @@ function updateInputChecked(element, props) {
36403640
var node = element;
36413641
var checked = props.checked;
36423642

3643-
if (checked != null) {
3643+
if (checked != null && node.checked !== !!checked) {
36443644
node.checked = checked;
36453645
}
36463646
}
@@ -4194,13 +4194,6 @@ function validateTextareaProps(element, props) {
41944194
function updateTextarea(element, props) {
41954195
var node = element;
41964196
var value = getToStringValue(props.value);
4197-
var defaultValue = getToStringValue(props.defaultValue);
4198-
4199-
if (defaultValue != null) {
4200-
node.defaultValue = toString(defaultValue);
4201-
} else {
4202-
node.defaultValue = "";
4203-
}
42044197

42054198
if (value != null) {
42064199
// Cast `value` to a string to ensure the value is set correctly. While
@@ -4211,10 +4204,22 @@ function updateTextarea(element, props) {
42114204
node.value = newValue;
42124205
} // TOOO: This should respect disableInputAttributeSyncing flag.
42134206

4214-
if (props.defaultValue == null && node.defaultValue !== newValue) {
4215-
node.defaultValue = newValue;
4207+
if (props.defaultValue == null) {
4208+
if (node.defaultValue !== newValue) {
4209+
node.defaultValue = newValue;
4210+
}
4211+
4212+
return;
42164213
}
42174214
}
4215+
4216+
var defaultValue = getToStringValue(props.defaultValue);
4217+
4218+
if (defaultValue != null) {
4219+
node.defaultValue = toString(defaultValue);
4220+
} else {
4221+
node.defaultValue = "";
4222+
}
42184223
}
42194224
function initTextarea(element, props) {
42204225
var node = element;
@@ -33179,7 +33184,7 @@ function createFiberRoot(
3317933184
return root;
3318033185
}
3318133186

33182-
var ReactVersion = "18.3.0-www-modern-e257717e";
33187+
var ReactVersion = "18.3.0-www-modern-3b22d407";
3318333188

3318433189
function createPortal$1(
3318533190
children,

compiled/facebook-www/ReactDOM-prod.classic.js

Lines changed: 51 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -973,6 +973,10 @@ function getActiveElement(doc) {
973973
return doc.body;
974974
}
975975
}
976+
function updateInputChecked(element, props) {
977+
props = props.checked;
978+
null != props && element.checked !== !!props && (element.checked = props);
979+
}
976980
function updateInput(element, props) {
977981
var value = getToStringValue(props.value),
978982
type = props.type;
@@ -996,8 +1000,7 @@ function updateInput(element, props) {
9961000
: null == props.checked &&
9971001
null != props.defaultChecked &&
9981002
(element.defaultChecked = !!props.defaultChecked);
999-
props = props.checked;
1000-
null != props && (element.checked = props);
1003+
updateInputChecked(element, props);
10011004
if (null != value)
10021005
if ("number" === type) {
10031006
if ((0 === value && "" === element.value) || element.value != value)
@@ -1077,15 +1080,18 @@ function updateOptions(node, multiple, propValue, setDefaultSelected) {
10771080
}
10781081
}
10791082
function updateTextarea(element, props) {
1080-
var value = getToStringValue(props.value),
1081-
defaultValue = getToStringValue(props.defaultValue);
1082-
element.defaultValue = null != defaultValue ? "" + defaultValue : "";
1083-
null != value &&
1083+
var value = getToStringValue(props.value);
1084+
if (
1085+
null != value &&
10841086
((value = "" + value),
10851087
value !== element.value && (element.value = value),
1086-
null == props.defaultValue &&
1087-
element.defaultValue !== value &&
1088-
(element.defaultValue = value));
1088+
null == props.defaultValue)
1089+
) {
1090+
element.defaultValue !== value && (element.defaultValue = value);
1091+
return;
1092+
}
1093+
props = getToStringValue(props.defaultValue);
1094+
element.defaultValue = null != props ? "" + props : "";
10891095
}
10901096
function initTextarea(element, props) {
10911097
var initialValue = props.value;
@@ -12560,14 +12566,14 @@ var isInputEventSupported = !1;
1256012566
if (canUseDOM) {
1256112567
var JSCompiler_inline_result$jscomp$332;
1256212568
if (canUseDOM) {
12563-
var isSupported$jscomp$inline_1562 = "oninput" in document;
12564-
if (!isSupported$jscomp$inline_1562) {
12565-
var element$jscomp$inline_1563 = document.createElement("div");
12566-
element$jscomp$inline_1563.setAttribute("oninput", "return;");
12567-
isSupported$jscomp$inline_1562 =
12568-
"function" === typeof element$jscomp$inline_1563.oninput;
12569+
var isSupported$jscomp$inline_1557 = "oninput" in document;
12570+
if (!isSupported$jscomp$inline_1557) {
12571+
var element$jscomp$inline_1558 = document.createElement("div");
12572+
element$jscomp$inline_1558.setAttribute("oninput", "return;");
12573+
isSupported$jscomp$inline_1557 =
12574+
"function" === typeof element$jscomp$inline_1558.oninput;
1256912575
}
12570-
JSCompiler_inline_result$jscomp$332 = isSupported$jscomp$inline_1562;
12576+
JSCompiler_inline_result$jscomp$332 = isSupported$jscomp$inline_1557;
1257112577
} else JSCompiler_inline_result$jscomp$332 = !1;
1257212578
isInputEventSupported =
1257312579
JSCompiler_inline_result$jscomp$332 &&
@@ -12879,20 +12885,20 @@ function registerSimpleEvent(domEventName, reactName) {
1287912885
registerTwoPhaseEvent(reactName, [domEventName]);
1288012886
}
1288112887
for (
12882-
var i$jscomp$inline_1603 = 0;
12883-
i$jscomp$inline_1603 < simpleEventPluginEvents.length;
12884-
i$jscomp$inline_1603++
12888+
var i$jscomp$inline_1598 = 0;
12889+
i$jscomp$inline_1598 < simpleEventPluginEvents.length;
12890+
i$jscomp$inline_1598++
1288512891
) {
12886-
var eventName$jscomp$inline_1604 =
12887-
simpleEventPluginEvents[i$jscomp$inline_1603],
12888-
domEventName$jscomp$inline_1605 =
12889-
eventName$jscomp$inline_1604.toLowerCase(),
12890-
capitalizedEvent$jscomp$inline_1606 =
12891-
eventName$jscomp$inline_1604[0].toUpperCase() +
12892-
eventName$jscomp$inline_1604.slice(1);
12892+
var eventName$jscomp$inline_1599 =
12893+
simpleEventPluginEvents[i$jscomp$inline_1598],
12894+
domEventName$jscomp$inline_1600 =
12895+
eventName$jscomp$inline_1599.toLowerCase(),
12896+
capitalizedEvent$jscomp$inline_1601 =
12897+
eventName$jscomp$inline_1599[0].toUpperCase() +
12898+
eventName$jscomp$inline_1599.slice(1);
1289312899
registerSimpleEvent(
12894-
domEventName$jscomp$inline_1605,
12895-
"on" + capitalizedEvent$jscomp$inline_1606
12900+
domEventName$jscomp$inline_1600,
12901+
"on" + capitalizedEvent$jscomp$inline_1601
1289612902
);
1289712903
}
1289812904
registerSimpleEvent(ANIMATION_END, "onAnimationEnd");
@@ -14246,8 +14252,7 @@ function updateProperties(
1424614252
case "input":
1424714253
"radio" === nextProps.type &&
1424814254
null != nextProps.name &&
14249-
((lastProps = nextProps.checked),
14250-
null != lastProps && (domElement.checked = lastProps));
14255+
updateInputChecked(domElement, nextProps);
1425114256
for (lastProps = 0; lastProps < updatePayload.length; lastProps += 2) {
1425214257
var propKey = updatePayload[lastProps],
1425314258
propValue = updatePayload[lastProps + 1];
@@ -16047,17 +16052,17 @@ Internals.Events = [
1604716052
restoreStateIfNeeded,
1604816053
batchedUpdates$1
1604916054
];
16050-
var devToolsConfig$jscomp$inline_1822 = {
16055+
var devToolsConfig$jscomp$inline_1812 = {
1605116056
findFiberByHostInstance: getClosestInstanceFromNode,
1605216057
bundleType: 0,
16053-
version: "18.3.0-www-classic-42d0ecd9",
16058+
version: "18.3.0-www-classic-2bdbd8ab",
1605416059
rendererPackageName: "react-dom"
1605516060
};
16056-
var internals$jscomp$inline_2191 = {
16057-
bundleType: devToolsConfig$jscomp$inline_1822.bundleType,
16058-
version: devToolsConfig$jscomp$inline_1822.version,
16059-
rendererPackageName: devToolsConfig$jscomp$inline_1822.rendererPackageName,
16060-
rendererConfig: devToolsConfig$jscomp$inline_1822.rendererConfig,
16061+
var internals$jscomp$inline_2181 = {
16062+
bundleType: devToolsConfig$jscomp$inline_1812.bundleType,
16063+
version: devToolsConfig$jscomp$inline_1812.version,
16064+
rendererPackageName: devToolsConfig$jscomp$inline_1812.rendererPackageName,
16065+
rendererConfig: devToolsConfig$jscomp$inline_1812.rendererConfig,
1606116066
overrideHookState: null,
1606216067
overrideHookStateDeletePath: null,
1606316068
overrideHookStateRenamePath: null,
@@ -16073,26 +16078,26 @@ var internals$jscomp$inline_2191 = {
1607316078
return null === fiber ? null : fiber.stateNode;
1607416079
},
1607516080
findFiberByHostInstance:
16076-
devToolsConfig$jscomp$inline_1822.findFiberByHostInstance ||
16081+
devToolsConfig$jscomp$inline_1812.findFiberByHostInstance ||
1607716082
emptyFindFiberByHostInstance,
1607816083
findHostInstancesForRefresh: null,
1607916084
scheduleRefresh: null,
1608016085
scheduleRoot: null,
1608116086
setRefreshHandler: null,
1608216087
getCurrentFiber: null,
16083-
reconcilerVersion: "18.3.0-www-classic-42d0ecd9"
16088+
reconcilerVersion: "18.3.0-www-classic-2bdbd8ab"
1608416089
};
1608516090
if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) {
16086-
var hook$jscomp$inline_2192 = __REACT_DEVTOOLS_GLOBAL_HOOK__;
16091+
var hook$jscomp$inline_2182 = __REACT_DEVTOOLS_GLOBAL_HOOK__;
1608716092
if (
16088-
!hook$jscomp$inline_2192.isDisabled &&
16089-
hook$jscomp$inline_2192.supportsFiber
16093+
!hook$jscomp$inline_2182.isDisabled &&
16094+
hook$jscomp$inline_2182.supportsFiber
1609016095
)
1609116096
try {
16092-
(rendererID = hook$jscomp$inline_2192.inject(
16093-
internals$jscomp$inline_2191
16097+
(rendererID = hook$jscomp$inline_2182.inject(
16098+
internals$jscomp$inline_2181
1609416099
)),
16095-
(injectedHook = hook$jscomp$inline_2192);
16100+
(injectedHook = hook$jscomp$inline_2182);
1609616101
} catch (err) {}
1609716102
}
1609816103
assign(Internals, {
@@ -16320,4 +16325,4 @@ exports.unstable_renderSubtreeIntoContainer = function (
1632016325
);
1632116326
};
1632216327
exports.unstable_runWithPriority = runWithPriority;
16323-
exports.version = "18.3.0-www-classic-42d0ecd9";
16328+
exports.version = "18.3.0-www-classic-2bdbd8ab";

0 commit comments

Comments
 (0)