react-useStateRef
useRef and UseState together!
How to use
Installation
$ npm i react-usestateref
import useState from 'react-usestateref'
function MyComponent(){
var [state,setState,ref]=useState(0)
}
As you can see it's 100% backward compatible. You can replace all your useState
with this import and you will always have the latest state.
Motivation:
Many StackOverflow questions that people struggling to get the current state
In React when functions accessing the state they receive the state from the moment
the function defined - not the current state.
So if the state changed, your functions and effects my use older state.
Using useRef
, can solve it because it have always one value. But when you update the Ref it's not re-render.
See the example code:
function MyComponent(){
var [counter,setCounter]=useState(0)
function increment(){
setCounter(counter+1)
alert(counter)
}
useEffect(()=>{
alert(counter)
return ()=>{
alert(counter)
}
},[])
return (
<div>
Current number: {counter}
<button onClick={increment}>
Increment
</button>
</div>)
}
To solve it I created a new hook useStateRef
See it in action:
import useState from 'react-usestateref'
function MyComponent(){
var [counter,setCounter,counterRef]=useState(0)
function increment(){
setCounter(counter+1)
alert(counterRef.current)
}
useEffect(()=>{
alert(counterRef.current)
return ()=>{
alert(counterRef.current)
}
},[])
return (
<div>
Current number: {counter}
<button onClick={increment}>
Increment
</button>
</div>)
}
It's fully support the useState
API, so you can change your useState
to useStateRef
and it will not break your app.
Contribution
- Star & fork this project.
- I'm open to your contribution.
- Better documentation or whatever your like. Just open a PR
Other innovations by cretors: