From 7f63ffec5879339803efce13474a96bbca3eb6d3 Mon Sep 17 00:00:00 2001 From: Michael Jackson Date: Mon, 30 Sep 2019 16:05:56 -0700 Subject: [PATCH] Fix ref in React 15.6.2 Fixes #6954 --- packages/react-router-dom/modules/Link.js | 73 ++++++++++++-------- packages/react-router-dom/modules/NavLink.js | 3 +- 2 files changed, 47 insertions(+), 29 deletions(-) diff --git a/packages/react-router-dom/modules/Link.js b/packages/react-router-dom/modules/Link.js index 04ae9839a1..15a4aa746d 100644 --- a/packages/react-router-dom/modules/Link.js +++ b/packages/react-router-dom/modules/Link.js @@ -16,33 +16,47 @@ function isModifiedEvent(event) { } const LinkAnchor = forwardRef( - ({ innerRef, navigate, onClick, ...rest }, forwardedRef) => { + ( + { + innerRef, // TODO: deprecate + navigate, + onClick, + ...rest + }, + forwardedRef + ) => { const { target } = rest; - return ( - { - try { - if (onClick) onClick(event); - } catch (ex) { - event.preventDefault(); - throw ex; - } - - if ( - !event.defaultPrevented && // onClick prevented default - event.button === 0 && // ignore everything but left clicks - (!target || target === "_self") && // let browser handle "target=_blank" etc. - !isModifiedEvent(event) // ignore clicks with modifier keys - ) { - event.preventDefault(); - navigate(); - } - }} - /> - ); + let props = { + ...rest, + onClick: event => { + try { + if (onClick) onClick(event); + } catch (ex) { + event.preventDefault(); + throw ex; + } + + if ( + !event.defaultPrevented && // onClick prevented default + event.button === 0 && // ignore everything but left clicks + (!target || target === "_self") && // let browser handle "target=_blank" etc. + !isModifiedEvent(event) // ignore clicks with modifier keys + ) { + event.preventDefault(); + navigate(); + } + } + }; + + // React 15 compat + if (forwardRefShim !== forwardRef) { + props.ref = forwardedRef || innerRef; + } else { + props.ref = innerRef; + } + + return ; } ); @@ -55,7 +69,13 @@ if (__DEV__) { */ const Link = forwardRef( ( - { component = LinkAnchor, replace, to, innerRef, ...rest }, + { + component = LinkAnchor, + replace, + to, + innerRef, // TODO: deprecate + ...rest + }, forwardedRef ) => { return ( @@ -86,7 +106,6 @@ const Link = forwardRef( if (forwardRefShim !== forwardRef) { props.ref = forwardedRef || innerRef; } else { - // TODO: deprecate props.innerRef = innerRef; } diff --git a/packages/react-router-dom/modules/NavLink.js b/packages/react-router-dom/modules/NavLink.js index c2561ec457..31cf377184 100644 --- a/packages/react-router-dom/modules/NavLink.js +++ b/packages/react-router-dom/modules/NavLink.js @@ -32,7 +32,7 @@ const NavLink = forwardRef( strict, style: styleProp, to, - innerRef, + innerRef, // TODO: deprecate ...rest }, forwardedRef @@ -80,7 +80,6 @@ const NavLink = forwardRef( if (forwardRefShim !== forwardRef) { props.ref = forwardedRef || innerRef; } else { - // TODO: deprecate props.innerRef = innerRef; }