百科.dev
全部条目AI 编程趋势榜开源项目技术资讯提交条目
登录
< 返回工具列表
R

react-useStateRef

> 前端框架
开源

一起使用 useRef 和 UseState!

197 stars0 点赞0 次浏览
访问官网GitHub

工具介绍

一起使用 useRef 和 UseState!

react-useStateRef

useRef and UseState together!

How to use

Installation

bash
$ npm i react-usestateref
javascript
import useState from 'react-usestateref'
function MyComponent(){
  var [state,setState,ref]=useState(0)
  // ref.current will always have the latest state  
}

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

  • https://stackoverflow.com/questions/54069253/usestate-set-method-not-reflecting-change-immediately
  • https://stackoverflow.com/questions/60438537/usestate-shows-previous-value-always
  • https://stackoverflow.com/questions/57847594/react-hooks-accessing-up-to-date-state-from-within-a-callback
  • https://stackoverflow.com/questions/55874789/using-react-hooks-why-are-my-event-handlers-firing-with-the-incorrect-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:

javascript
function MyComponent(){
  var [counter,setCounter]=useState(0)
  function increment(){
    setCounter(counter+1)
    alert(counter) // will show 0 since the state not updated yet.			
  }
  useEffect(()=>{
    alert(counter) // Whatever is the current state. It always alert 0
    return ()=>{
        alert(counter) // On unmount it still alert 0, even if you called increment many times.
    }
  },[])
  return (
  
)
}

To solve it I created a new hook useStateRef

See it in action:

javascript
import useState from 'react-usestateref' // see this line
function MyComponent(){
  var [counter,setCounter,counterRef]=useState(0)
  function increment(){
    setCounter(counter+1)
    alert(counterRef.current) // will show 1
  }
  useEffect(()=>{
    alert(counterRef.current) // Always show the last value
    return ()=>{
        alert(counterRef.current) // // Always show the last value
    }
  },[])
  return (
  
)
}

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:

  • Boti - Bot Creator

Coltonos.com - Build your WhatsApp assistant in minutes

Issues· 0 开放

查看全部 Issues在 GitHub 打开

暂无开放 Issues,或尚未同步最近议题。

> 标签

TypeScriptjavascriptreactuserefusestate

暂无评论,来聊聊你的看法吧

> 工具信息

发布日期2026年8月1日
最后更新2026年9月18日
分类前端框架
定价开源

> 相关工具

R
React
用于构建用户界面的 JavaScript 库
V
Vue.js
渐进式 JavaScript 框架
N
Next.js
基于 React 的全栈 Web 框架