{"id":13880797,"url":"https://github.com/webNeat/react-tidy","last_synced_at":"2025-07-16T17:31:07.459Z","repository":{"id":42503580,"uuid":"205756562","full_name":"webNeat/react-tidy","owner":"webNeat","description":"A collection of atomic, independent, typed, tested and documented React custom hooks.","archived":false,"fork":false,"pushed_at":"2023-12-20T11:36:46.000Z","size":1293,"stargazers_count":163,"open_issues_count":5,"forks_count":5,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-07-15T01:35:47.970Z","etag":null,"topics":["custom-hooks","react","react-hooks","utility-library"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/webNeat.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-09-02T01:43:52.000Z","updated_at":"2025-04-24T14:36:58.000Z","dependencies_parsed_at":"2023-12-20T13:05:56.649Z","dependency_job_id":"5bc97e28-453d-49fb-9e92-da273b7e81d6","html_url":"https://github.com/webNeat/react-tidy","commit_stats":{"total_commits":79,"total_committers":3,"mean_commits":"26.333333333333332","dds":0.06329113924050633,"last_synced_commit":"2a90b91f3e9cca2a87ed6b6eb54cb9bd151f4618"},"previous_names":[],"tags_count":24,"template":false,"template_full_name":null,"purl":"pkg:github/webNeat/react-tidy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/webNeat%2Freact-tidy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/webNeat%2Freact-tidy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/webNeat%2Freact-tidy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/webNeat%2Freact-tidy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/webNeat","download_url":"https://codeload.github.com/webNeat/react-tidy/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/webNeat%2Freact-tidy/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265527545,"owners_count":23782480,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["custom-hooks","react","react-hooks","utility-library"],"created_at":"2024-08-06T08:03:29.528Z","updated_at":"2025-07-16T17:31:07.179Z","avatar_url":"https://github.com/webNeat.png","language":"TypeScript","funding_links":[],"categories":["TypeScript"],"sub_categories":[],"readme":"# React Tidy\n\nA collection of atomic, independent, typed, tested and documented React custom hooks.\n\n[![Bundle size](https://img.shields.io/bundlephobia/minzip/react-tidy?style=flat-square)](https://bundlephobia.com/result?p=react-tidy)\n[![Tests Status](https://img.shields.io/github/actions/workflow/status/webneat/react-tidy/tests.yml?branch=master\u0026style=flat-square)](https://github.com/webneat/react-tidy/actions?query=workflow:\"Tests\")\n[![Coverage Status](https://img.shields.io/coveralls/github/webNeat/react-tidy/master?style=flat-square)](https://coveralls.io/github/webNeat/react-tidy?branch=master)\n[![Rank](https://img.shields.io/librariesio/sourcerank/npm/react-tidy?style=flat-square)](https://libraries.io/npm/react-tidy)\n[![Version](https://img.shields.io/npm/v/react-tidy?style=flat-square)](https://www.npmjs.com/package/react-tidy)\n[![MIT](https://img.shields.io/npm/l/react-tidy?style=flat-square)](LICENSE)\n\n## Contents\n\n- [What is React Tidy?](#what-is-react-tidy)\n- [Features](#features)\n- [Installation](#installation)\n- [List of Custom Hooks](#list-of-custom-hooks)\n- [Contributing](#contributing)\n- [Changelog](#changelog)\n\n## What is React Tidy?\n\n**React Tidy** is a library of utility custom hooks. It's like [lodash](https://lodash.com/) for React hooks. The goal is to provide a collection of tiny hooks that solve common problems or make writing React components easier.\n\n## Features\n\nTo keep the library **tidy**, all included hooks are:\n\n- **Atomic**: only does **one thing** and does it well.\n- **Independent**: does not depend on any external library/configuration/context to work. Just import and call it.\n- **Typed**: can infer the type of its arguments and give the correct type in return.\n- **Tested**: has meaningful tests that cover all use cases.\n- **Documented**: has its own README describing the arguments, return and giving a usage example.\n\n## Installation\n\nInstall using `npm`\n\n```\nnpm install react-tidy\n```\n\nOr using `yarn`\n\n```\nyarn add react-tidy\n```\n\n## List of Custom Hooks\n\n- [useIsMounted](src/useIsMounted) Avoid using/updating state of unmounted components.\n- [useInstance](src/useInstance) Create an instance of any class and make your component react to its changes.\n- [usePrevious](src/usePrevious) Track previous values of a variable.\n- [useRefresh](src/useRefresh) Rerender your React component whenever you want.\n- [useStorage](src/useStorage) Read and write items on browser storages the React way.\n\n## Contributing\n\nYou can contribute to this library in many ways, including:\n\n- **Reporting bugs**: Simply open an issue and describe the bug. Please include a code snippet to reproduce the bug, it really helps to solve the problem quickly.\n\n- **Suggesting new hooks**: If you have a common use case that you think worth having its own hook, open an issue and we will discuss it. Do you already have an implementation for it? Great, make a pull request and I will review it. Please make sure your code is consistent with the rest of the codebase and use [Prettier](https://prettier.io/) and [EditorConfig](https://editorconfig.org/) to format your files.\n\nThose are just examples, any issue or pull request is welcome :)\n\n## Changelog\n\n**1.3.7 (April 17th 2023)**\n\n- Update dev dependencies and Node version on Github actions.\n\n**1.3.6 (August 21th, 2022)**\n\n- Update dev dependencies.\n\n**1.3.5 (April 2nd, 2022)**\n\n- Update dev dependencies.\n\n**1.3.4 (March 3rd, 2022)**\n\n- Fix [Can't import the named export 'useMemo' from non EcmaScript module](https://github.com/webNeat/react-tidy/issues/40)\n\n**1.3.3 (February 27th, 2022)**\n\n- Using `parcel` instead of `tsdx` and `yarn` instead of `npm`.\n\n**1.3.2 (November 13th, 2021)**\n\n- Updating dev dependencies.\n\n**1.3.1 (May 27th, 2021)**\n\n- Updating dev dependencies and improving docs.\n\n**1.3.0 (January 7th, 2021)**\n\n- Add [useInstance](src/useInstance) hook.\n- Fix a bug on [useStorage](src/useStorage) when setting the item to `null`.\n\n**1.2.1 (January 2nd, 2021)**\nFix the bug of [usePrevious](src/usePrevious) not being exported.\n\n**1.2.0 (January 2nd, 2021)**\nAdd [usePrevious](src/usePrevious) hook.\n\n**1.1.1 (December 29, 2020)**\nUpgrade dev dependencies.\n\n**1.1.0 (October 9, 2020)**\nMake [useStorage](src/useStorage) able to work on the server to enable SSR.\n\n**1.0.0 (September 23, 2020)**\nThe first official release containing 3 hooks [useIsMounted](src/useIsMounted), [useRefresh](src/useRefresh) and [useStorage](src/useStorage).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FwebNeat%2Freact-tidy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FwebNeat%2Freact-tidy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FwebNeat%2Freact-tidy/lists"}