基础知识:
- 防抖:在指定时间内的多次触发,只会执行最后一次(多次触发只执行一次)
- 节流:在指定时间内的多次触发,只会执行最开始的那次(多次触发,每隔一段时间执行一次)
react中useMemo和useCallback的区别和使用场景: useMemo和useCallback都存在缓存的特点,用于性能的优化,避免一些不必要的渲染。
- useMemo是缓存属性(即变量值),返回的是一个值
- useCallback是缓存函数,返回的是一个缓存的函数
useMemo的使用场景
虽然传递给子组件的gradeInfo没有变化,但是每次更新text数据,还是重新渲染了子组件。原因是每次更新text时,父组件会重新渲染,随之每次的gradeInfo都是重新定义的一个新的对象,所以即使使用了React.memo也依然会造成子组件的重新渲染。
修改如上图,每次text的改变就不会影响到子组件的重新渲染了
useCallback的使用场景
上图,每输入数据的时候,子组件都会跟随渲染,而这样的渲染大可不必,因为我们仅仅是想获取输入框内最终的输入值。
修改之后,每次text内容更改之后,都会更新textRef的值,而textRef的改变是不会触发重新渲染的,所以handleSubmit没有改变,那么子组件也不会重新渲染。
react自定义hook实现节流和防抖:(每次组件的渲染都会重新渲染hook,所以需要用到useCallback)
防抖:
节流: