Skip to content

Commit 8ba240f

Browse files
mcanshbrophdawg11
andauthored
feat(remix-react): allow <Link>'s "to" prop to accept absolute urls (#5092)
Signed-off-by: Logan McAnsh <logan@mcan.sh> Co-authored-by: Matt Brophy <matt@brophy.org>
1 parent 686e20d commit 8ba240f

File tree

2 files changed

+24
-2
lines changed

2 files changed

+24
-2
lines changed

.changeset/odd-plants-doubt.md

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
---
2+
"remix": patch
3+
"@remix-run/react": patch
4+
---
5+
6+
allow `<Link>`'s "to" prop to accept absolute urls
7+
8+
if absolute url, don't prefetch

packages/remix-react/components.tsx

+16-2
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,10 @@ function usePrefetchBehavior(
290290
*/
291291
let NavLink = React.forwardRef<HTMLAnchorElement, RemixNavLinkProps>(
292292
({ to, prefetch = "none", ...props }, forwardedRef) => {
293+
let isAbsolute =
294+
typeof to === "string" &&
295+
(/^[a-z+]+:\/\//i.test(to) || to.startsWith("//"));
296+
293297
let href = useHref(to);
294298
let [shouldPrefetch, prefetchHandlers] = usePrefetchBehavior(
295299
prefetch,
@@ -303,13 +307,16 @@ let NavLink = React.forwardRef<HTMLAnchorElement, RemixNavLinkProps>(
303307
{...props}
304308
{...prefetchHandlers}
305309
/>
306-
{shouldPrefetch ? <PrefetchPageLinks page={href} /> : null}
310+
{shouldPrefetch && !isAbsolute ? (
311+
<PrefetchPageLinks page={href} />
312+
) : null}
307313
</>
308314
);
309315
}
310316
);
311317
NavLink.displayName = "NavLink";
312318
export { NavLink };
319+
313320
/**
314321
* This component renders an anchor tag and is the primary way the user will
315322
* navigate around your website.
@@ -318,11 +325,16 @@ export { NavLink };
318325
*/
319326
let Link = React.forwardRef<HTMLAnchorElement, RemixLinkProps>(
320327
({ to, prefetch = "none", ...props }, forwardedRef) => {
328+
let isAbsolute =
329+
typeof to === "string" &&
330+
(/^[a-z+]+:\/\//i.test(to) || to.startsWith("//"));
331+
321332
let href = useHref(to);
322333
let [shouldPrefetch, prefetchHandlers] = usePrefetchBehavior(
323334
prefetch,
324335
props
325336
);
337+
326338
return (
327339
<>
328340
<RouterLink
@@ -331,7 +343,9 @@ let Link = React.forwardRef<HTMLAnchorElement, RemixLinkProps>(
331343
{...props}
332344
{...prefetchHandlers}
333345
/>
334-
{shouldPrefetch ? <PrefetchPageLinks page={href} /> : null}
346+
{shouldPrefetch && !isAbsolute ? (
347+
<PrefetchPageLinks page={href} />
348+
) : null}
335349
</>
336350
);
337351
}

0 commit comments

Comments
 (0)