useState 和 useRef 区别
当调用 setState 时,react 是异步更新 state 的,如果 setState 后立即获取 state 的值,此时 state 尚未更新,因此为旧的状态
useRef
总共有两种用法:
1、获取子组件的实例
2、在函数组件中的一个全局变量,不会因为重复 render
重复申明, 类似于类组件的 this.xxx
有些情况下,我们需要保证函数组件每次 render 之后,某些变量不会被重复申明,比如说 Dom 节点,定时器的 id 等等
在类组件中,我们完全可以通过给类添加一个自定义属性来保留,比如说 this.xxx, 但是函数组件没有 this,我们就需要使用 useRef 来实现
区别:
1、useState 触发重新渲染,useRef 不触发
2、useState 异步更新其值,useRef 同步更新
防抖和节流
节流: n 秒内只运行一次,若在 n 秒内重复触发,只有一次生效
防抖: n 秒后再执行该事件,若在 n 秒内被重复触发,则重新计时
应用场景
防抖在连续的事件,只需触发一次回调的场景有:
搜索框搜索输入。只需用户最后一次输入完,再发送请求
手机号、邮箱验证输入检测
窗口大小
resize
。只需窗口调整完成后,计算窗口大小。防止重复渲染。
节流在间隔一段时间执行一次回调的场景有:
滚动加载,加载更多或滚到底部监听
搜索框,搜索联想功能
评论区