react-hooks-use-previous

Strongly typed and well tested React Hooks to store and retrieve previous values from any component property.

Downloads in past

Stats

StarsIssuesVersionUpdatedCreatedSize
react-hooks-use-previous
7231.1.14 years ago5 years agoMinified + gzip package size for react-hooks-use-previous in KB

Readme

React Hooks Use Previous Logo
react-hooks-use-previous

Strongly typed and well tested React Hooks to store and retrieve previous values from any component property.


!Build Statusbuild-badgebuild !Code Coveragecoverage-badgecoverage !Versionversion-badgepackage !Downloadsdownloads-badgenpmtrends !MIT Licenselicense-badgelicense !Semantic Releaserelease-badgerelease !Conventional Commitscommits-badgecommits All Contributors !PRs Welcomeprs-badgeprs !Code of Conductcoc-badgecoc !Discorddiscord-badgediscord !Twittertwitter-badgetwitter

About

React Hooks Use Previous is a collection of strongly typed and well tested hooks to store and retrieve retrieve previous values from any component property. The most common default values are already set so just close that bracket and save yourself those extra characters.
This library works out of the box with React / React Native projects using JavaScript or Typescript and has all necessary type declarations included.

Table of Contents


- 🐛 Bugs - 💡 Feature Requests

⚙️ Installation

Latest stable release

npm install --save react-hooks-use-previous

or
yarn add react-hooks-use-previous

Latest Release Candidate

npm install --save react-hooks-use-previous@next

or
yarn add react-hooks-use-previous@next

⚡️ Getting Started

import React, { useState } from 'react';
import usePrevious, { usePreviousNumber } from 'react-hooks-use-previous';
import { isEqual } from 'lodash';

const MyReactComponent = () => {
    // This is the state variable from which we need
    // the previous value while rendering
    const [value, setValue] = useState<number>(0);

    // Option 1: Use the generic hook so that we can
    // assign a custom initial previous value (=13)
    // for the first component render execution
    const prevValue = usePrevious<number>(value, 13);

    // Option 2: Use one of the predefined hooks which
    // already ship with a default value (e.g. =0) and
    // profit from a much cleaner and more readable syntax
    const prevValue = usePreviousNumber(value);

    // Optional: Pass a custom equality function in a configuration
    // object as the third parameter. The default equality check is
    // a reference comparison. This additional parameter allows e.g.
    // a deep value comparison to check if an update is necessary.
    const prevValue = usePrevious<number[]>(value, [], { equalityFn: (a, b) => isEqual(a, b) });

    return (
        <div>
            <span>{`The previous value was: ${prevValue}`}</span>
            <span>{`The current value is: ${value}`}</span>
        </div>
    );
};

export default MyReactComponent;

🎯 Features

  • Stores and provides value of a state before it was updated
  • Includes helper functions to simplify usage

Other Solutions

I'm not aware of any, if you are please make a pull requestprs and add it here!

Issues

Looking to contribute? Look for the Good First Issuegood-first-issue label.

🐛 Bugs

Please file an issue for bugs, missing documentation, or unexpected behavior.
See Bugs
bugs

💡 Feature Requests

Please file an issue to suggest new features. Vote on feature requests by adding a 👍. This helps maintainers prioritize what to work on.
See Feature Requestsrequests

Contributors ✨

Thanks goes to these people (emoji keyemojis):
<td align="center"><a href="https://michael-hettmer.de"><img src="https://avatars0.githubusercontent.com/u/13876624?v=4" width="100px;" alt=""/><br /><sub><b>Michael Hettmer</b></sub></a><br /><a href="https://github.com/MichaelHettmer/react-hooks-use-previous/commits?author=MichaelHettmer" title="Code">💻</a> <a href="https://github.com/MichaelHettmer/react-hooks-use-previous/commits?author=MichaelHettmer" title="Documentation">📖</a> <a href="#infra-MichaelHettmer" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="https://github.com/MichaelHettmer/react-hooks-use-previous/commits?author=MichaelHettmer" title="Tests">⚠️</a></td>
<td align="center"><a href="https://github.com/chrismilson"><img src="https://avatars2.githubusercontent.com/u/13655076?v=4" width="100px;" alt=""/><br /><sub><b>Chris Milson</b></sub></a><br /><a href="https://github.com/MichaelHettmer/react-hooks-use-previous/commits?author=chrismilson" title="Code">💻</a> <a href="https://github.com/MichaelHettmer/react-hooks-use-previous/issues?q=author%3Achrismilson" title="Bug reports">🐛</a> <a href="https://github.com/MichaelHettmer/react-hooks-use-previous/commits?author=chrismilson" title="Tests">⚠️</a></td>


This project follows the all-contributorsall-contributors specification. Contributions of any kind welcome!

LICENSE

This project is licensed under the MIT License - see the LICENSE file for details.