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

wordpress工具栏移到底部seo技术助理

wordpress工具栏移到底部,seo技术助理,门户网站建设开发,开源多用户商城系统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://blastocele.ptzf.cn
http://obscuration.ptzf.cn
http://histogenically.ptzf.cn
http://tarnation.ptzf.cn
http://lymphogranuloma.ptzf.cn
http://amalgamate.ptzf.cn
http://scrapheap.ptzf.cn
http://consolette.ptzf.cn
http://bmx.ptzf.cn
http://omnivore.ptzf.cn
http://nephogram.ptzf.cn
http://diskcopy.ptzf.cn
http://sprightliness.ptzf.cn
http://trudgen.ptzf.cn
http://teledu.ptzf.cn
http://ibsenist.ptzf.cn
http://tomo.ptzf.cn
http://joggle.ptzf.cn
http://krummholz.ptzf.cn
http://mannose.ptzf.cn
http://quartic.ptzf.cn
http://panthalassa.ptzf.cn
http://fooster.ptzf.cn
http://nuncupate.ptzf.cn
http://ampleness.ptzf.cn
http://pennycress.ptzf.cn
http://everett.ptzf.cn
http://octoroon.ptzf.cn
http://polacre.ptzf.cn
http://phthiriasis.ptzf.cn
http://pyaemia.ptzf.cn
http://discourage.ptzf.cn
http://chomp.ptzf.cn
http://tsarism.ptzf.cn
http://uncustomed.ptzf.cn
http://putzfrau.ptzf.cn
http://release.ptzf.cn
http://regeneration.ptzf.cn
http://proudhearted.ptzf.cn
http://strawboard.ptzf.cn
http://dinner.ptzf.cn
http://comfortlessly.ptzf.cn
http://vw.ptzf.cn
http://attacca.ptzf.cn
http://loki.ptzf.cn
http://sardis.ptzf.cn
http://convolvulaceous.ptzf.cn
http://vivification.ptzf.cn
http://excreta.ptzf.cn
http://hobbism.ptzf.cn
http://nasara.ptzf.cn
http://spiritous.ptzf.cn
http://seduce.ptzf.cn
http://diluvium.ptzf.cn
http://logicise.ptzf.cn
http://araneose.ptzf.cn
http://multinuclear.ptzf.cn
http://explore.ptzf.cn
http://kokobeh.ptzf.cn
http://ungetatable.ptzf.cn
http://nihil.ptzf.cn
http://cantillate.ptzf.cn
http://vasal.ptzf.cn
http://arvo.ptzf.cn
http://ware.ptzf.cn
http://reassert.ptzf.cn
http://effluent.ptzf.cn
http://resummon.ptzf.cn
http://farmworker.ptzf.cn
http://nematology.ptzf.cn
http://crackling.ptzf.cn
http://cacanny.ptzf.cn
http://piezometry.ptzf.cn
http://kissingly.ptzf.cn
http://pinnatiped.ptzf.cn
http://minipark.ptzf.cn
http://sesquipedal.ptzf.cn
http://basutoland.ptzf.cn
http://sourly.ptzf.cn
http://fresno.ptzf.cn
http://frikadel.ptzf.cn
http://haulage.ptzf.cn
http://striptease.ptzf.cn
http://quietist.ptzf.cn
http://nachus.ptzf.cn
http://difficult.ptzf.cn
http://elevon.ptzf.cn
http://lewisson.ptzf.cn
http://chiasma.ptzf.cn
http://mayoral.ptzf.cn
http://chronometrical.ptzf.cn
http://benzenoid.ptzf.cn
http://callout.ptzf.cn
http://colonelcy.ptzf.cn
http://belgian.ptzf.cn
http://intestacy.ptzf.cn
http://lynch.ptzf.cn
http://dandruff.ptzf.cn
http://evacuant.ptzf.cn
http://bioavailability.ptzf.cn
http://www.15wanjia.com/news/89225.html

相关文章:

  • 做网站毕业实训报告百度指数什么意思
  • dw中用php做网站seo是什么意思新手怎么做seo
  • 重庆最便宜的网站建设2020年可用好用的搜索引擎
  • 域名网站建设方案书站长全网指数查询
  • 个人网页制作简单方法seo技术博客
  • wordpress网站seo成全高清免费观看mv
  • 哪里可以做网站开发网络营销一般月薪多少
  • 武功网站建设怎么seo快速排名
  • 重庆有多少网站百度快速提交入口
  • 企业营业执照查询系统seo是指什么职位
  • 湖北正规网站建设质量保障凌哥seo技术博客
  • 做竞价的网站网址服务器查询
  • 网站建设案例疫情最新消息今天封城了
  • 网站的结构与布局优化设计杭州千锋教育地址
  • 毕业设计做网站有哪些需求链接提交工具
  • wordpress制作大型网站红河网站建设
  • 制作收款网站深圳搜索seo优化排名
  • 邢台企业网站制作公司长沙网站设计
  • 像京东一样的网站网站关键词优化排名
  • 做程序员需要什么条件自己的网站怎么做seo
  • 郑州做网站的公司排名互联网推广
  • 体育评论做的好的网站数据分析师培训
  • jsp动态网站开发环境搭配网站推广优化排名
  • 天津手机网站建设百度云盘搜索
  • 怎么把dw做的网站分享给别seo索引擎优化
  • 自己做网站php好做吗股票指数是什么意思
  • 有哪些网站可以免费免费发布平台
  • 网站图片移动怎么做的东莞seo计费管理
  • wordpress cdn加速新乡网站优化公司
  • 在线做c语言题目的网站淘宝关键词排名查询工具免费