npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

react-use-value-change

v1.0.1

Published

React value change listener

Downloads

7

Readme

Install

$ npm install react-use-value-change --save

or

$ yarn add react-use-value-change

Direct link to npmjs.com

The problem

Quite often I find myself having complex useEffect to detect the state changes. This library helps to keep up state tracking.

It contains Three simplified methods:

  • useStringValueChange
  • useNumberValueChange
  • useBooleanValueChange

Simple setup

const [currentValue, {setValue, resetValue, resetToCurrentValue, resetToOriginalValue}, {equals, original}] = useStringValueChange("the initial value");
  • currentValue is the string current value
  • original is immutable original value (until value is reset)
  • equals indicates if original === currentValue
  • setValue("new value") will change the currentValue, keeps original and equals is false if the new value is different form original
  • resetValue() will reset original to currentValue and equals to true
  • resetValue("something else") will reset currentValue and original to "something else" and equals to true
  • resetToCurrentValue() will reset the original to currentValue and equals to true
  • resetToOriginalValue() will reset the currentValue to original and equals to true

All the other methods follows the same pattern.

Using react input

The difference are with input listeners

  • useStringInputValueChange accepts HTMLTextAreaElement | HTMLInputElement
  • useNumberInputValueChange accepts HTMLInputElement (input type number)
  • useBooleanInputValueChange accepts HTMLInputElement (checkbox or radio)

Those accept HTMLTextAreaElement | HTMLInputElement as setters. Which means one has to call

setValue(value: HTMLInputElement) instead of setValue(value: string) (or boolean or number)

a bit more...

There is also an umbrella method for more complex logic: useValueChange, which has to be approached carefully as it might trigger recursive rendering.

See useValueChange.test.ts how to use it.

Might be a bug, but it is not

When is used the initial value is immutable. One has to use the React useffect to reset the value.