1.3.0 • Published 11 months ago

use-deep-compare v1.3.0

Weekly downloads
11,212
License
MIT
Repository
github
Last release
11 months ago

Use Deep Compare

version downloads MIT License

Use Deep Compare - React hooks, except using deep comparison on the inputs, not reference equality. Read about Hooks feature.

Installation

With npm

npm i use-deep-compare

Or with yarn

yarn add use-deep-compare

Or with pnpm

pnpm add use-deep-compare

Or with bun

bun add use-deep-compare

Usage

useDeepCompareEffect

import React from "react";
import { useDeepCompareEffect } from "use-deep-compare";

function App({ object, array }) {
  useDeepCompareEffect(() => {
    // do something significant here
    return () => {
      // return to clean up that significant thing
    };
  }, [object, array]);

  return <div>{/* render significant thing */}</div>;
}

useDeepCompareCallback

import React from "react";
import { useDeepCompareCallback } from "use-deep-compare";

function App({ object, array }) {
  const callback = useDeepCompareCallback(() => {
    // do something significant here
  }, [object, array]);

  return <div>{/* render significant thing */}</div>;
}

useDeepCompareLayoutEffect

import React from "react";
import { useDeepCompareLayoutEffect } from "use-deep-compare";

function App({ object, array }) {
  useDeepCompareLayoutEffect(() => {
    // perform layout effects
  }, [object, array]);

  return <div>{/* render component */}</div>;
}

useDeepCompareMemo

import React from "react";
import { useDeepCompareMemo } from "use-deep-compare";

function App({ object, array }) {
  const memoized = useDeepCompareMemo(() => {
    // do something significant here
  }, [object, array]);

  return <div>{/* render significant thing */}</div>;
}

useDeepCompareImperativeHandle

import React from "react";
import { useDeepCompareImperativeHandle } from "use-deep-compare";

function App({ object, array }) {
  const ref = React.useRef();
  useDeepCompareImperativeHandle(ref, () => ({
    // create imperative methods
  }), [object, array]);

  return <div ref={ref}>{/* render component */}</div>;
}

react-hooks/exhaustive-deps eslint warnings

To receive eslint warnings about missing array dependencies, just like for standard useEffect, useCallback, useMemo, ... hooks - extend you eslint config as follows:

{
  "rules": {
    // ...
    "react-hooks/exhaustive-deps": ["warn", {
      "additionalHooks": "(useDeepCompareEffect|useDeepCompareCallback|useDeepCompareMemo|useDeepCompareImperativeHandle|useDeepCompareLayoutEffect)"
    }]
  }
}

Credits

@taze-editor/core@infinitebrahmanuniverse/nolb-use-d@everything-registry/sub-chunk-3025tc-create-app@rdub/react-sql.js-httpvfskep-plate-coregstore-jsste-react-coretranslation-helps-print-preview-rcl@ahmetkuslular/react-native-collapsible-tab-view@carlosthe19916-latest/react-table-batteries@cherry-pie/react@9troisquarts/ant-form@datasolvr/ui-libraryyqf-feifei-js-react-chatzum-plate-coreuse-typed-event-listeneruse-popperuse-dispatch-action@ediri/backstage-plugin-flux@hazelcast/ui@hillium/ant-form@flowes/plate-core@edygar/use-request@gen3/frontend@gisce/react-formiga-table@gisce/react-ooui@indexdata/harvester-admin@liveauctioneers/hammer-ui-payments@ledangtruongdat/primereact-lowcoder-components@mturley-latest/react-table-batteries@nilscox/graphviz-react@meta-ui/runtime@modern-js-block/antd-atomic-components@modern-js-block/arco-atomic-components@modern-js-block/container-activity@modern-js-block/g2plot@mediamonks/use-popper@maktouch/use-popper@ohs/use-progressive-image@postinumero/remix-react-intl@savks/react-forms@regraph-ai/client@regraph-ai/frontend@securityscorecard/design-systemreact-native-collapsible-with-infinite-scrollreact-native-collapsible-tab-viewreact-native-collapsible-tab-view-rtlreact-native-collapsible-tab-view-scroll-fixreact-native-readiumreact-native-renpho-collapsible-tab-viewreact-native-airone-tabviewproskomma-react-hooksreact-native-openai-jsxsemix-form-rendernext-axiomplasmic-knackplasmic-supabaseplasmic-supabase-newplasmic-supabase-shamspontx-semix-formqode-daily-uirn-collapsible-tab-viewrn-collapsible-tab-view-scrollablereact-native-tab-adasisimple-text-editor-rclgitea-react-toolkithooks-view-model@watheia/app.ui.hooks.use-graphql-light@watheia/iron-ui.hooks.use-graphql-light@watheia/design.ui.hooks.use-graphql-light@weaveworksoss/backstage-plugin-flux@waweb/base-ui.hooks.use-graphql-light@watheia/tools.hooks.use-graphql-light@waweb/compendium.base-ui.hooks.use-graphql-light@xelah/core@xelah/type-perf-html@watheia/base-ui.extensions.sapper-mfe@watheia/base-ui.design.system.guide@watheia/base-ui.hooks.use-graphql-light@watheia/micro.base-ui.hooks.use-graphql-light@udecode/plate-core@taze-editor/taze-core@teamimpact/veda-ui@virtual-grid/react@zhangrh1101/react-native-collapsible-tab-view@subscan/widget-runtime@ster/core@sunmao-ui/runtime@sunmao-ui-fork/runtime@teambit/base-ui.hooks.use-graphql-lightannouncekit-react-nativedatocms-plugin-table-editordatocms-plugin-web-previewsdatocms-plugin-complex-table-editorbetter-plate-coredragonfly-vfont-detect-rhl@sewell_stephens/late-core
1.3.0

11 months ago

1.2.1

1 year ago

1.2.0

1 year ago

1.1.0

5 years ago

1.0.0

5 years ago

0.1.0

6 years ago

0.0.1

6 years ago

0.0.0

6 years ago