Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
84 changes: 13 additions & 71 deletions packages/react/src/jsx/ReactJSXElement.js
Original file line number Diff line number Diff line change
Expand Up @@ -156,30 +156,9 @@ function elementRefGetterWithDeprecationWarning() {
* will not work. Instead test $$typeof field against Symbol.for('react.transitional.element') to check
* if something is a React Element.
*
* @param {*} type
* @param {*} props
* @param {*} key
* @param {string|object} ref
* @param {*} owner
* @param {*} self A *temporary* helper to detect places where `this` is
* different from the `owner` when React.createElement is called, so that we
* can warn. We want to get rid of owner and replace string `ref`s with arrow
* functions, and as long as `this` and owner are the same, there will be no
* change in behavior.
* @param {*} source An annotation object (added by a transpiler or otherwise)
* indicating filename, line number, and/or other information.
* @internal
*/
function ReactElement(
type,
key,
self,
source,
owner,
props,
debugStack,
debugTask,
) {
function ReactElement(type, key, props, owner, debugStack, debugTask) {
// Ignore whatever was passed as the ref argument and treat `props.ref` as
// the source of truth. The only thing we use this for is `element.ref`,
// which will log a deprecation warning on access. In the next release, we
Expand Down Expand Up @@ -348,16 +327,7 @@ export function jsxProd(type, config, maybeKey) {
}
}

return ReactElement(
type,
key,
undefined,
undefined,
getOwner(),
props,
undefined,
undefined,
);
return ReactElement(type, key, props, getOwner(), undefined, undefined);
}

// While `jsxDEV` should never be called when running in production, we do
Expand All @@ -376,8 +346,6 @@ export function jsxProdSignatureRunningInDevWithDynamicChildren(
type,
config,
maybeKey,
source,
self,
) {
if (__DEV__) {
const isStaticChildren = false;
Expand All @@ -389,8 +357,6 @@ export function jsxProdSignatureRunningInDevWithDynamicChildren(
config,
maybeKey,
isStaticChildren,
source,
self,
__DEV__ &&
(trackActualOwner
? Error('react-stack-top-frame')
Expand All @@ -407,8 +373,6 @@ export function jsxProdSignatureRunningInDevWithStaticChildren(
type,
config,
maybeKey,
source,
self,
) {
if (__DEV__) {
const isStaticChildren = true;
Expand All @@ -420,8 +384,6 @@ export function jsxProdSignatureRunningInDevWithStaticChildren(
config,
maybeKey,
isStaticChildren,
source,
self,
__DEV__ &&
(trackActualOwner
? Error('react-stack-top-frame')
Expand All @@ -442,7 +404,7 @@ const didWarnAboutKeySpread = {};
* @param {object} props
* @param {string} key
*/
export function jsxDEV(type, config, maybeKey, isStaticChildren, source, self) {
export function jsxDEV(type, config, maybeKey, isStaticChildren) {
const trackActualOwner =
__DEV__ &&
ReactSharedInternals.recentlyCreatedOwnerStacks++ < ownerStackLimit;
Expand All @@ -451,8 +413,6 @@ export function jsxDEV(type, config, maybeKey, isStaticChildren, source, self) {
config,
maybeKey,
isStaticChildren,
source,
self,
__DEV__ &&
(trackActualOwner
? Error('react-stack-top-frame')
Expand All @@ -469,8 +429,6 @@ function jsxDEVImpl(
config,
maybeKey,
isStaticChildren,
source,
self,
debugStack,
debugTask,
) {
Expand All @@ -491,7 +449,7 @@ function jsxDEVImpl(
if (isStaticChildren) {
if (isArray(children)) {
for (let i = 0; i < children.length; i++) {
validateChildKeys(children[i], type);
validateChildKeys(children[i]);
}

if (Object.freeze) {
Expand All @@ -505,7 +463,7 @@ function jsxDEVImpl(
);
}
} else {
validateChildKeys(children, type);
validateChildKeys(children);
}
}

Expand Down Expand Up @@ -591,16 +549,7 @@ function jsxDEVImpl(
defineKeyPropWarningGetter(props, displayName);
}

return ReactElement(
type,
key,
self,
source,
getOwner(),
props,
debugStack,
debugTask,
);
return ReactElement(type, key, props, getOwner(), debugStack, debugTask);
}
}

Expand All @@ -620,7 +569,7 @@ export function createElement(type, config, children) {
// prod. (Rendering will throw with a helpful message and as soon as the
// type is fixed, the key warnings will appear.)
for (let i = 2; i < arguments.length; i++) {
validateChildKeys(arguments[i], type);
validateChildKeys(arguments[i]);
}

// Unlike the jsx() runtime, createElement() doesn't warn about key spread.
Expand Down Expand Up @@ -721,10 +670,8 @@ export function createElement(type, config, children) {
return ReactElement(
type,
key,
undefined,
undefined,
getOwner(),
props,
getOwner(),
__DEV__ &&
(trackActualOwner
? Error('react-stack-top-frame')
Expand All @@ -740,10 +687,8 @@ export function cloneAndReplaceKey(oldElement, newKey) {
const clonedElement = ReactElement(
oldElement.type,
newKey,
undefined,
undefined,
!__DEV__ ? undefined : oldElement._owner,
oldElement.props,
!__DEV__ ? undefined : oldElement._owner,
__DEV__ && oldElement._debugStack,
__DEV__ && oldElement._debugTask,
);
Expand Down Expand Up @@ -829,16 +774,14 @@ export function cloneElement(element, config, children) {
const clonedElement = ReactElement(
element.type,
key,
undefined,
undefined,
owner,
props,
owner,
__DEV__ && element._debugStack,
__DEV__ && element._debugTask,
);

for (let i = 2; i < arguments.length; i++) {
validateChildKeys(arguments[i], clonedElement.type);
validateChildKeys(arguments[i]);
}

return clonedElement;
Expand All @@ -853,10 +796,9 @@ export function cloneElement(element, config, children) {
* @param {ReactNode} node Statically passed child of any type.
* @param {*} parentType node's parent's type.
*/
function validateChildKeys(node, parentType) {
function validateChildKeys(node) {
if (__DEV__) {
// With owner stacks is, no warnings happens. All we do is
// mark elements as being in a valid static child position so they
// Mark elements as being in a valid static child position so they
// don't need keys.
if (isValidElement(node)) {
if (node._store) {
Expand Down
Loading