首页 > 其他分享 >React — 通用hooks封装

React — 通用hooks封装

时间:2024-03-28 12:33:44浏览次数:10  
标签:封装 hooks return value React useState error const useEffect

1.UseLocalStorage:该 Hook 用于在本地存储中存储和检索数据。在组件之间共享和保持状态,并且在页面重新加载时保持数据的持久性。

import { useState } from 'react';

const useLocalStorage = (key, initialValue) => {
    const [storedValue, setStoredValue] = useState(() => {
        try {
            const item = window.localStorage.getItem(key);
            return item ? JSON.parse(item) : initialValue;
        } catch (error) {
            console.error(error);
            return initialValue;
        }
    });

    const setValue = (value) => {
        try {
            setStoredValue(value);
            window.localStorage.setItem(key, JSON.stringify(value));
        } catch (error) {
            console.error(error);
        }
    };

    return [storedValue, setValue];
};

export default useLocalStorage;

2.UseFetch:这个 Hook 用于进行网络请求并获取数据。在组件中发起异步请求,并管理数据的加载状态,使得处理网络请求变得更加简单和方便。

import { useState, useEffect } from 'react';

const useFetch = (url) => {
    const [data, setData] = useState(null);
    const [loading, setLoading] = useState(true);

    useEffect(() => {
        const fetchData = async () => {
            try {
                const response = await fetch(url);
                const result = await response.json();
                setData(result);
                setLoading(false);
            } catch (error) {
                console.error(error);
                setLoading(false);
            }
        };

        fetchData();

    }, [url]);

    return { data, loading };
};

export default useFetch;

3.UseDebounce:此 Hook 用于延迟某个值的更新,通常用于处理用户输入的延迟搜索或其他需要防抖的场景。它可以帮助减少不必要的请求或计算,提高性能并提升用户体验。

import { useState, useEffect } from 'react';

const useDebounce = (value, delay) => {
    const [debouncedValue, setDebouncedValue] = useState(value);

    useEffect(() => {
        const handler = setTimeout(() => {
            setDebouncedValue(value);
        }, delay);

        return () => {
            clearTimeout(handler);
        };
    }, [value, delay]);

    return debouncedValue;
};

export default useDebounce;

 

标签:封装,hooks,return,value,React,useState,error,const,useEffect
From: https://www.cnblogs.com/qinlinkun/p/18101333

相关文章

  • React— React面试题按照学习顺序持续更新
    1.React的特点采用组件化模式,命名式编码,提高代码复用率;在ReactNative中可以使用react语法进行移动端开发使用虚拟DOM(v-dom)和diff算法,减少DOM和浏览器的交互2.babel在React的作用ES6语法转ES5,如箭头函数、模板字符串、解构赋值等。Babel可以将这些高级语法转换为浏览器能......
  • Ant Design 设置必填属性的一个坑!Objects are not valid as a React child (found: ob
    1、刚开始,我是用第一种方式。通过一个变量,来设置必填属性的提示值 显示是没有问题的。但是点击ModalForm确认按钮时,报错ObjectsarenotvalidasaReactchild(found:objectwithkeys{requiredMsg}).Ifyoumeanttorenderacollectionofchildren,useanarray......
  • vue/react- 报错Unable to authenticate, need: BASIC realm=“Sonatype Nexus Reposi
    问题描述在vue/react(node.js)项目中,node安装依赖install装包时报错:Unabletoauthenticate,need:BASICrealm=“SonatypeNexusRepositoryManager“如果我们报错差不多,就可以完美解决。解决方法这个问题,其实......
  • 二次封装axios
    importaxiosfrom"axios";import{ElMessage}from"element-plus";constrequest=axios.create({baseURL:"http://127.0.0.1:3000/api",timeout:5000,});request.interceptors.request.use((config)=>{//c......
  • Vue 与 React:前端框架对比分析
    ......
  • 使用可迭代对象作为 React 组件
    源码最近看React源码的时候发现其在处理数组的同时也对可迭代协议做了处理,因此React组件可以是一个返回可迭代对象的函数。源码如下:reconcileChildFibersImplif(isArray(newChild)){returnreconcileChildrenArray(returnFiber,currentFirstChild,newChild,lanes,......
  • 视频封装格式FLV
    FLV的封装格式FLV(FlashVideo)是一种常见的视频封装格式,最初由Adobe公司开发,用于在网络上播放的视频内容。FLV格式通常用于将视频和音频流组合在一起,并以一种紧凑的方式存储在单个文件中。下面是FLV封装格式的一些关键点:Header记录了FLV的类型,版本、流信息、Header长度......
  • 统一结果封装
    1、Result一般来说,增删改返回boolean,查询返回对象或集合,还有其他类型的返回数据,前段解析数据比较麻烦,需要返回一个统一的数据结果统一数据返回结果类:data:封装数据(各种类型的,例如boolean、null、json等)code:封装操作类型与是否成功,可以使用枚举类msg:封装特殊信息(操作失败......
  • 深入理解 React 中的 children props 和 render props
    深入理解React中的childrenprops和renderprops在React中,childrenprops和renderprops是两种常见的组件复用模式,它们都可以帮助我们更好地组织和复用组件代码。虽然它们的实现方式有所不同,但都能够有效地实现组件之间的数据传递和功能共享。childrenpropsch......
  • 封装组合式函数
    封装组件importtype{XtxGuessInstance}from'@/types/components'import{ref}from'vue'/**猜你喜欢组合式函数*/exportconstuseGuessList=()=>{//获取猜你喜欢组件实例constguessRef=ref()//滚动触底事件constonScrolltolower=()=>{guess......