React-Hook

自定义hooks的时候 命名必须是小驼峰的写法:例如:useData

Hooks 防抖:

export function useFangFn(params, dely = 200) {
  const [state, setState] = useState(params)
  let timer = useRef(null).current
  // 这里的setvalue==用户使用的setvalue()
  const setvalue = useRef(args => {
    if (timer) {
      clearTimeout(timer)
      timer = null
    }
    timer = setTimeout(() => {
      setState(args)
    }, dely)
  })
  // 返回一个参数 再返回一个方法
  return [state, setvalue.current]
}

Hooks 节流:

function useThrottle(params, config = { delay: 1000, leading: false, trailing: true }) {
  // 这里定义一个更新的setState 用于每次更新页面 并且初始化一个值
  const [state, setState] = useState(params)
  // 缓存定时器和上一次执行时间
  let timer = useRef(null).current
  let provious = useRef(0).current
  // 封装一个执行函数
  const fnApply = (agrs, now = 0) => {
    // 改变上次执行的时间
    provious = now
    // 当你调用了这个执行函数的时候 你要去想 你要干嘛??
    // 调用执行函数肯定要返回给用户东西 要返回什么???
    // 返回一个x轴和y轴的数值给用户 使用setState设置值并且更新页面返回给用户
    setState(agrs)
    // 如果我在执行期间有定时器正在执行的话 那么就会产生错误 所以这个时候 需要清空定时器
    timer = null
  }
  // 定义一个清楚定时器的函数
  const clearFn = () => {
    if (timer) {
      clearTimeout(timer)
      timer = null
    }
  }
  // 使用ref缓存一个内部的执行函数 到时候只需要把这个执行函数返回给用户即可 用户可以直接调用 传入参数 然后经过一些判断是调用执行函数还是清楚计时器函数
  const fnc = useRef(args => {
    let now = Date.now()
    // 首先我们的需求就是用户首次进入不执行
    // 当我们刚进入的时候 这个上一次等待时间肯定为0 所以 如果为0的时候就给他一个等待时间 这样 就标识为这次已经执行过了 然后就会进行下面的操作
    if (!provious && !config.leading) {
      provious = now
    }
    // 否则的话 用户设置了第一次执行 或者这不是第一次进入的话 就给他设定一个等待的时间差
    let waiting = config.delay - (now - provious)
    // 切记每一次都要清空定时器 如果不清空的话 这边定时器还存在呢 下面的函数又执行了定时器 会出错
    clearFn()
    // 如果很久都没有执行了 那么刚进入就直接执行 然后直接return 就不走下面了
    if (waiting <= 0) {
      return fnApply(args, now)
    }
    // 只有当用户连续触发的时候 来判断是否是最后一次触发
    if (config.trailing) {
      timer = setTimeout(() => {
        fnApply(args, now)
      }, waiting)
    }
  })
  // useEffect(() => {
  //   Object.assign(useThrottle, () => {
  //     if (timer) {
  //       clearTimeout(timer)
  //       timer = null
  //       provious = 0
  //     }
  //   })
  // }, [])
  // 我们要返回的是数据和一个用户能调用的方法
  return [state, fnc.current]
}

hooks ref强制更新:

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React Typewriter Hook是一个使用React Hooks来实现打字机效果的库。它可以帮助我们在React应用中轻松地实现打字机效果。 要使用React Typewriter Hook,我们首先需要通过npm来安装它,命令如下:npm install react-typewriter-hook。 使用React Typewriter Hook的核心代码包括引入React和useTypewriter钩子,并在组件中使用useTypewriter钩子来创建打字效果。例如,在一个名为Note的组件中,我们可以通过useTypewriter钩子传入一个字符串来实现打字效果。 具体使用React Typewriter Hook的例子可以在官方文档中查看。在使用时,我们只需要根据示例的用法将useTypewriter钩子应用在需要实现打字效果的地方即可。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [【分享创造】react-typewriter-hook: 用react hooks来实现打字机的效果](https://blog.csdn.net/weixin_33924312/article/details/88613110)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [React引入react-typewriter-hook实现打字效果](https://blog.csdn.net/AK852369/article/details/119819250)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [react-typewriter-hook:Use使用react钩子轻松输入效果](https://download.csdn.net/download/weixin_42131276/18402977)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值