当前位置: 首页 > news >正文

买域名网站网站本身对网站打开速度有何影响

买域名网站,网站本身对网站打开速度有何影响,网络技术服务合同模板,网站建设销售客户疑问React 基础巩固(四十六)——自定义Hook的应用 一、自定义Hook的应用 自定义Hook本质上只是一种函数代码逻辑的抽取,严格意义上而言,它并不算React的特性。 实现组件创建/销毁时打印日志 import React, { memo, useEffect, useState } from "react…

React 基础巩固(四十六)——自定义Hook的应用

一、自定义Hook的应用

自定义Hook本质上只是一种函数代码逻辑的抽取,严格意义上而言,它并不算React的特性。

  1. 实现组件创建/销毁时打印日志

    import React, { memo, useEffect, useState } from "react";function useLogLife(name) {useEffect(() => {console.log(`${name}组件创建`);return () => {console.log(`${name}组件销毁`);};}, []);
    }const Home = memo(() => {useLogLife("Home");return <h1>Home Page</h1>;
    });const About = memo(() => {useLogLife("About");return <h1>About Page</h1>;
    });export default memo(function App() {const [isShow, setIsShow] = useState(true);useLogLife("App");return (<div><h1>App Component</h1><button onClick={(e) => setIsShow(!isShow)}>切换</button>{isShow && <Home />}{isShow && <About />}</div>);
    });

    image-20230802004528738

  2. 实现Context共享

    封装TokenContextUserContext 两个Context在自定义HookuseUserToken中,通过使用userUserToken同时获取两个Context的内容:

    import React, { memo, useContext } from "react";
    import { useUserToken } from "./hooks";const Home = memo(() => {const [user, token] = useUserToken();console.log(user, token);return <h1>Home Page</h1>;
    });const About = memo(() => {const [user, token] = useUserToken();console.log(user, token);return <h1>About Page</h1>;
    });export default memo(function App() {return (<div><h1>App Component</h1><Home /><About /></div>);
    });

    image-20230802010608705

  3. 实现获取滚动位置

    封装滚动监听事件:

    import { useEffect, useState } from "react";function useScrollPosition() {const [scrollX, setScrollX] = useState(0);const [scrollY, setScrollY] = useState(0);useEffect(() => {function handleScroll() {console.log(window.scrollX, window.scrollY);setScrollX(window.scrollX);setScrollY(window.scrollY);}window.addEventListener("scroll", handleScroll);return () => {window.removeEventListener("scroll", handleScroll);};}, []);return [scrollX, scrollY];
    }export default useScrollPosition;

    通过useScrollPosition自定义Hook进行复用:

    import React, { memo } from "react";
    import "./style.css";
    import { useScrollPosition } from "./hooks";
    const Home = memo(() => {const [scrollX, scrollY] = useScrollPosition();console.log("Home", scrollX, scrollY);return (<h1>Home Page: {scrollX} --- {scrollY}</h1>);
    });const About = memo(() => {const [scrollX, scrollY] = useScrollPosition();console.log("About", scrollX, scrollY);return (<h1>About Page: {scrollX} --- {scrollY}</h1>);
    });
    export default memo(function App() {return (<div className="app"><h1>App Component</h1><Home /><About /></div>);
    });

    image-20230802011725567

  4. localStorage数据存储

    封装useLocalStorage自定义Hook:

    import { useEffect, useState } from "react";function useLocalStorage(key) {const [data, setData] = useState(() => {const item = localStorage.getItem(key);if (!item) return "";return JSON.parse(item);});useEffect(() => {localStorage.setItem(key, JSON.stringify(data));}, [data]);return [data, setData];
    }
    export default useLocalStorage;

    通过useLocalStorage来实现localStorage数据的自动化存储,并进行复用。即,一旦需要本地存储的值发生变化,便对localStorage进行对应的更新:

    import React, { memo, useEffect, useState } from "react";
    import "./style.css";
    import { useLocalStorage } from "./hooks";export default memo(function App() {// 通过key,直接从localStorage获取数据const [token, setToken] = useLocalStorage("token");function setTokenHandle() {setToken("new token");}const [avatarUrl, setAvatarUrl] = useLocalStorage("avatarUrl");function setAvatarUrlHandle() {setAvatarUrl("new url");}return (<div className="app"><h1>App Component</h1><h1>token:{token}</h1><button onClick={setTokenHandle}>设置token</button><h1>Avatar:{avatarUrl}</h1><button onClick={setAvatarUrlHandle}>设置avatarUrl</button></div>);
    });

    image-20230802014858739

http://www.yayakq.cn/news/676576/

相关文章:

  • 做奢侈品代工厂的网站设计网站的功能有哪些内容
  • 演示公司soap公司网站西安建设网站的公司哪家好
  • 网站备案要到哪里logo在线制作设计
  • 商务网站的特点购物网站建设价位
  • 网站建站历史网站轮播图
  • 公司做铸造的招聘网站都有哪些品牌商城网站制作
  • 有哪些建筑设计网站WordPress stock
  • 韩国男女直接做的视频网站电销系统哪个好
  • app开发公司属于什么行业百家号优化上首页
  • 网站建设公司赚钱吗温州论坛招聘
  • 做网站用的是什么语言网站建设多少钱个人
  • 做阿里巴巴网站应怎样定位烟台北京网站建设公司哪家好
  • 南京建设项目环评公示期网站网站建设分金手指科捷13
  • 奔驰宝马游戏网站建设对网站建设公司说
  • vr超市门户网站建设wordpress建站位置
  • 一个网站开发的意义科技感的网站
  • 手机怎样建设网站营销型网站开发流程
  • 莱芜网站建设电话戏曲网站建设的可行性分析
  • 物流建设网站有没有做软件的网站
  • 郑州中扬科技网站建设公司怎么样教育机构网站建设公司
  • 公司网站内容更新该怎么做省内新闻最新消息
  • 免费贴图素材网站安卓手机app开发用什么软件
  • 网站推广公司就去柚米盘锦网站建设策划
  • 衡水做wap网站价格图片类网站如何做优化
  • 公司的网站建设哪家比较好淘宝运营主要做些什么
  • 成品网站1688入门网百度百家号登录入口
  • 镇江网络违法网站设计软件图标
  • 景安服务器管理助手如何备份网站用了采集站域名做网站
  • 购物网站模板免费中小企业局域网组网方案
  • 网站网址更新了怎么查企业做网站哪家便宜