Socket
Book a DemoInstallSign in
Socket

@dc7290/next-router-prefetch

Package Overview
Dependencies
Maintainers
1
Versions
22
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@dc7290/next-router-prefetch

This provides a custom hook that contains 'next/router'.

4.0.0
latest
Source
npmnpm
Version published
Weekly downloads
0
Maintainers
1
Weekly downloads
 
Created
Source

next-router-prefetch

npm version license downloads

✋ This version uses Next.js 11. For earlier versions, please use this one.

next-router-prefetch is a custom hook that wraps useRouter.
Apply prefetch to links that do not use the Link component.

日本語

Features

Usually,

const router = useRouter();
router.push("/about");

If you try to transition pages in this way, it will take some time to load before you can transition.
If this is a page transition with the next/link(Link) component, it will automatically prefetch the link destination when the link enters the viewport.
(Unless you have set prefetch={false}.)
However, if you use router.push, the page will not be moved immediately because automatic prefetch is not performed.

The solution to this is next-router-prefetch!

Installation

yarn add @dc7290/next-router-prefetch@2.2.2 # npm i @dc7290/next-router-prefetch@2.2.2

Usage

useRouterPrefetch(url, observe, nextRouterOptions);

Use the first argument to enter the link destination.
This link can be the same as the one used in router.push, so it can be a UrlObject as well as a string.
The UrlObject received internally is converted to a string so that it can be applied to router.prefetch, so there is no need to pass a string for prefetch.

Running useRouterPrefetch() will return handleRouterPush and (if observe is true) prefetchTarget.

handleRouterPush, as the name suggests, is a function that transitions to the passed link destination.
Use this in the event you want to trigger, or in useEffect, etc.

prefetchTarget is a ref object that is supposed to be observed by IntersectionObserver.
Set this to the ref of the element you want prefetched when it enters the viewport.

Example of use in JavaScript

import React, { useEffect } from "react";
import { useRouterPrefetch } from "@dc7290/next-router-prefetch";

const FooComponent = () => {
  const { handleRouterPush, prefetchTarget } = useRouterPrefetch("/foo");
  // You can also give it to them in the following ways
  // const { handleRouterPush, prefetchTarget } = useRouterPrefetch({
  //   pathname: "/posts/[postId]";
  //   query: {
  //       postId: 1;
  //   };
  //   hash: "title";
  // });

  return (
    <div ref={prefetchTarget} onClick={handleRouterPush}>
      Link to 'foo' page.
    </div>
  );
};

// Use with observe = false
const BarComponent = () => {
  const { handleRouterPush } = useRouterPrefetch("/bar", false);
  useEffect(() => {
    if (login) {
      handleRouterPush();
    }
  });

  return <div>Example login page.</div>;
};

Example of use in TypeScript

import React, { useEffect } from "react";
import { useRouterPrefetch } from "@dc7290/next-router-prefetch";

const FooComponent: React.VFC = () => {
  const { handleRouterPush, prefetchTarget } =
    useRouterPrefetch<HTMLDivElement>("/foo");
  // You can also give it to them in the following ways
  // const { handleRouterPush, prefetchTarget } = useRouterPrefetch<HTMLDivElement>({
  //   pathname: "/posts/[postId]";
  //   query: {
  //       postId: 1;
  //   };
  //   hash: "title";
  // });

  return (
    <div ref={prefetchTarget} onClick={handleRouterPush}>
      Link to 'foo' page.
    </div>
  );
};

// Use with observe = false
const BarComponent: React.VFC = () => {
  const { handleRouterPush } = useRouterPrefetch("/bar", false);
  useEffect(() => {
    if (login) {
      handleRouterPush();
    }
  });

  return <div>Example login page.</div>;
};

Options

url

valuedescription
string or UrlObjectSpecifies the transition destination.
It takes on the same type as when passed to router.push().

observe

valuedescription
booleanUse IntersectionObserver to decide whether to prefetch or not.
The default is true, and if set to false it will prefetch immediately after rendering.

nextRouterOptions

This is the same as the default optins for router.push.

keyvaluedescription
intersectionObserverOptionsIntersectionObserverInitSpecify the options to be passed to IntersectionObserver when observe is set to true.reference(MDN)
asstring or UrlObjectOptional decorator for the path that will be shown in the browser URL bar.
Before Next.js 9.5.3 this was used for dynamic routes, check our previous docs to see how it worked.
optionsobjectOptional object with the following configuration options:
scroll: Scroll to the top of the page after a navigation. Defaults to true
shallow: Update the path of the current page without rerunning getStaticProps, getServerSideProps or getInitialProps. Defaults to false
locale: The active locale is automatically prepended. locale allows for providing a different locale. When false href has to include the locale as the default behavior is disabled.

Tips

Here are some useful ways to use it.

Linking with pathpida

import { pagesPath } from "~/utils/$path";

// ~~~~ abbreviation

const { handleRouterPush, prefetchTarget } = useRouterPrefetch<HTMLElement>(
  pagesPath.posts._postId(props.url).$url()
);

// ~~~~ abbreviation

It is also possible to work with pathpida, a library that makes links type-safe, in this way. And you don't need to pass pagesPath.posts._postId(props.url). You don't even need to pass $url().pathname as a string to make pathpida even more useful!

Author

dc7290 dhkh.cba0927@gmail.com

License

"next-router-prefetch" is under MIT license.

Keywords

react

FAQs

Package last updated on 12 Aug 2021

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

About

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.

  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc

U.S. Patent No. 12,346,443 & 12,314,394. Other pending.