use-abort-signal
TypeScript icon, indicating that this package has built-in type declarations

1.0.3 • Public • Published

use-abort-signal

English | 简体中文

NPM version NPM downloads

During the development process with react, it is often necessary to make network requests within useEffect. However, when the dependencies of useEffect change or the component is unmounted, the network request might not be completed yet, leading to unexpected effects. use-abort-signal is designed to solve this problem by safely canceling fetch requests in useEffect.

How to Use

useAbortSignal

Type:

export function useAbortSignal(effect: (signal: AbortSignal) => Promise<void>, deps?: DependencyList): void
export function useAbortSignal(effect: (signal: AbortSignal) => Promise<void>, callback: () => void, deps?: DependencyList): void

Usage:

import useAbortSignal from "use-abort-signal"
// Or
import { useAbortSignal } from "use-abort-signal"

useAbortSignal(
    async signal => {
        // Do something
        // Pass the signal parameter into your fetch request
        const response = await fetch("xxx", { signal })
        // If the fetch request has not completed when the dependencies change or the component is unmounted, it will automatically cancel, and the code below will not be executed.
        // Things to do after successfully obtaining the response.
    },
    [/** dependencies */]
)

If you need to perform certain actions when the dependencies change or the component is unmounted, you can do so by passing the callback function as the second argument:

import useAbortSignal from "use-abort-signal"

useAbortSignal(
    async signal => {
        // Do something
        // Pass the signal parameter into your fetch request
        const response = await fetch("xxx", { signal })
        // If the fetch request has not completed when the dependencies change or the component is unmounted, it will automatically cancel, and the code below will not be executed.
        // Things to do after successfully obtaining the response.
    },
    () => {
        // Executed when dependencies change or the component is unmounted.
    },
    [/** dependencies */]
)

useAbortableFetch

Type:

export function useAbortableFetch(effect: (fetch: typeof window.fetch) => Promise<void>, deps?: DependencyList): void
export function useAbortableFetch(effect: (fetch: typeof window.fetch) => Promise<void>, callback: () => void, deps?: DependencyList): void

The usage is basically the same as useAbortSignal, except that the first function's parameter changes from abortSignal to fetch:

import { useAbortableFetch } from "use-abort-signal"

useAbortableFetch(
    async fetch => {
        // No need to add a signal, it will be added automatically.
        const response = await fetch("xxx")
    },
    [/** dependencies */]
)

useAbortableFetch(
    async fetch => {
        const response = await fetch("xxx")
    },
    () => {
        // Executed when dependencies change or the component is unmounted.
    },
    [/** dependencies */]
)

Package Sidebar

Install

npm i use-abort-signal

Weekly Downloads

1

Version

1.0.3

License

MIT

Unpacked Size

54.3 kB

Total Files

10

Last publish

Collaborators

  • 1adybug