// Github项目每日优选 第3篇
// 正文共 1996 字
// 预计阅读时间:10 分钟各位宝友大家好,今天给大家带来了 react-use 。咱说心里话,这个东西我第一次看见真觉得捡到了宝儿。React hooks我相信很多同学已经门清了,这个库实现了基本上我们常见的所有自定义Hooks,需要哪个直接查看源代码复制到你的项目中,二次在改一改,你的同事夸你666呢😁
ℹ️ 一句话概述他就是必不可少的 React Hooks 集合.
useBattery — 跟踪设备电池状态。useGeolocation — 跟踪用户设备的地理位置状态。useHover and useHoverDirty — 跟踪鼠标悬停某个元素的状态。useHash —跟踪用户hash变化。useIdle — 跟踪用户是否处于非活动状态。useIntersection — 跟踪元素的视窗变化区域(用于懒加载IntersectionObserver)useKey, useKeyPress, useKeyboardJs, and useKeyPressEvent — 追踪按键。useLocation and useSearchParam — 跟踪页面导航栏的位置状态。useLongPress — 跟踪某些元素的长按手势。useMedia —跟踪 CSS 媒体查询的状态。useMediaDevices — 跟踪连接的硬件设备的状态。useMotion — 跟踪设备运动传感器的状态。useMouse and useMouseHovered — 跟踪鼠标位置的状态。useMouseWheel — 跟踪滚动鼠标滚轮的 deltaY。useNetworkState — 跟踪浏览器网络连接的状态。useOrientation — 跟踪设备屏幕方向的状态。usePageLeave — 当鼠标离开页面边界时触发。useScratch — 跟踪鼠标点击和滑动状态。useScroll — 跟踪 HTML 元素的滚动位置。useScrolling — 跟踪 HTML 元素是否正在滚动。useStartTyping — 检测用户何时开始输入。useWindowScroll — 跟踪窗口滚动位置。useWindowSize — 跟踪窗口尺寸。useMeasure and useSize — 跟踪 HTML 元素的尺寸。createBreakpoint — 跟踪 innerWidthuseScrollbarWidth — 检测浏览器的原生滚动条宽度。useAudio — 播放音频并展示其控件。useClickAway —当用户点击目标区域外时触发回调。useCss — 动态调整 CSS。useDrop and useDropArea — 跟踪文件、链接和复制粘贴放置。useFullscreen —全屏显示元素或视频。useSlider — 在任何 HTML 元素上提供滑动行为。useSpeech — 从文本字符串合成语音。useVibrate — 使用振动 API 提供物理反馈。Vibration API.useVideo — 播放视频、跟踪其状态并展示播放控件。useRaf —在每个 requestAnimationFrame 上重新渲染组件。useInterval and useHarmonicIntervalFn — 使用 setInterval 在设定的间隔上重新渲染组件。useSpring — 根据弹簧动力学随时间插入数字。useTimeout — 超时后重新渲染组件。useTimeoutFn — 超时后调用给定函数。useTween — 重新渲染组件,同时对从 0 到 1 的数字进行补间。useUpdate —返回一个回调,它在调用时重新渲染组件。useAsync, useAsyncFn, and useAsyncRetry — 解析异步函数。useBeforeUnload — 当用户尝试重新加载或关闭页面时显示浏览器警报。useCookie — 提供读取、更新和删除 cookie 的方法。useCopyToClipboard — 将文本复制到剪贴板。useDebounce —函数去抖]useError — 错误调度程序。useFavicon — 设置页面的 favicon。useLocalStorage — 管理 localStorage 中的值。useLockBodyScroll — 锁定主体元素的滚动。useRafLoop — 在 RAF 循环内调用给定的函数。useSessionStorage — 管理 sessionStorage 中的值。useThrottle and useThrottleFn — throttles a function.useTitle — 置页面的标题。usePermission — 查询浏览器 API 的权限状态。useEffectOnce — 修改后的 useEffect 钩子,只运行一次。useEvent — 订阅事件。useLifecycles — calls mount and unmount callbacks.useMountedState and useUnmountPromise — 踪组件是否已安装。usePromise — resolves promise only while component is mounted.useLogger — 在组件经历生命周期时控制台打印。useMount — 调用挂载回调。useUnmount — 调用卸载回调。useUpdateEffect — 仅对更新运行效果。useIsomorphicLayoutEffect — 服务端渲染时不显示警告的 useLayoutEffect。useDeepCompareEffect, useShallowCompareEffect, and useCustomCompareEffect — 根据其依赖项的深度比较运行效果createMemo — 记忆钩子工厂。createReducer — 带有自定义中间件的 reducer 钩子工厂。createReducerContext and createStateContext — 组件之间共享状态的钩子工厂。useDefault — 当 state 为 null 或 undefined 时返回默认值。useGetSet — 返回状态 getter get() 而不是原始状态。useGetSetState — as if useGetSet and useSetState had a baby(这句原谅我不厚道的笑了).useLatest — 返回最新的 state 或 propsusePrevious — 返回最新的 state 或 props.usePreviousDistinct — 与 usePrevious 类似,但使用谓词来确定是否应更新以前的内容。useObservable — 跟踪 Observable 的最新值。useRafState — 创建仅在 requestAnimationFrame 之后更新的 setState 方法。useSetState — 创建类似于 this.setState 的 setState 方法。useStateList —循环迭代数组。useToggle and useBoolean — 跟踪布尔值的状态。useCounter and useNumber — 跟踪数字的状态。useList useUpsert — 跟踪数组的状态。useMap — — 跟踪对象的状态。useSet — 跟踪 Set 的状态。useQueue —实现简单的队列。useStateValidator — 跟踪对象的状态。useStateWithHistory — 存储先前的状态值并提供遍历它们的句柄。useMultiStateValidator — 与 useStateValidator 类似,但一次跟踪多个状态。useMediatedState —与常规 useState 类似,但通过自定义函数进行调解。useFirstMountState —检查当前渲染是否是第一个。useRendersCount — 计算组件渲染。createGlobalState — 跨组件共享状态。useMethods — useReducer 的简洁替代品。useEnsuredForwardedRef and ensuredForwardRef — 安全地使用 React.forwardedRef。import {useBattery} from 'react-use';
const Demo = () => {
const batteryState = useBattery();
if (!batteryState.isSupported) {
return (
<div>
<strong>Battery sensor</strong>: <span>not supported</span>
</div>
);
}
if (!batteryState.fetched) {
return (
<div>
<strong>Battery sensor</strong>: <span>supported</span> <br />
<strong>Battery state</strong>: <span>fetching</span>
</div>
);
}
return (
<div>
<strong>Battery sensor</strong>: <span>supported</span> <br />
<strong>Battery state</strong>: <span>fetched</span> <br />
<strong>Charge level</strong>: <span>{ (batteryState.level * 100).toFixed(0) }%</span> <br />
<strong>Charging</strong>: <span>{ batteryState.charging ? 'yes' : 'no' }</span> <br />
<strong>Charging time</strong>:
<span>{ batteryState.chargingTime ? batteryState.chargingTime : 'finished' }</span> <br />
<strong>Discharging time</strong>: <span>{ batteryState.dischargingTime }</span>
</div>
);
};