范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

useEffect依赖项中的全局范围变量?

  像‘window.location.pathname’这样的外部范围值不是有效的依赖项,因为改变它们不会重新渲染组件。 用例
  假设我们必须在每个页面上执行一个操作,并且每当路由更改时我们都必须执行此操作。
  由于我们必须在每个页面组件上执行操作,所以让我们将逻辑抽象为一个钩子。文件
  index.js 文件包含具有两个页面的路由器配置 -> 主页和其他页面。
  主页和其他页面仅呈现文本并调用公共 useLocation 挂钩。
  在 useLocation 钩子中,我们将根据 window.location.pathname 执行一些操作,这是一个全局范围的变量。// FILENAME -> index.js  import React from "react"; import { render } from "react-dom"; import { BrowserRouter as Router, Route, Link } from "react-router-dom";  import Other from "./components/Other"; import Home from "./components/Home";  // Basic Router to render Home Page and Other Page const BasicExample = () => (               
  • Home
  • Other

); render(, document.getElementById("root"));// FILENAME -> useLocation.js // This is the hook that we will be running on each page import { useEffect } from "react"; const useLocation = (pathname) => { useEffect(() => { /* * If the pathname is same as current page path, perform some operation * For this example, the operation is to alert the user * only if pathname passed and window.location.pathname are equal */ if (pathname === window.location.pathname) { alert( `On Page -> , pathname -> ${pathname}, window.location.pathname -> ${window.location.pathname}` ); } }, [pathname, window.location.pathname]); }; export default useLocation;// Home Page import React from "react"; import useLocation from "../useLocation"; const Home = () => { useLocation("/"); return

Home

; }; export default Home; // ---------------------------------------------------------------------- // Other Page import React from "react"; import useLocation from "../useLocation"; const Other = () => { useLocation("/other"); return

Other

; }; export default Other;相互作用   在交互中,我们可以看到,一旦我们登陆主页,我们就会看到路径 -> "/" 的警告,然后导航到其他页面,我们会看到路径 -> "/other" 的警告。   一切似乎都很好,那么问题是什么? 问题   让我们修改代码以在效果运行完成后执行清理操作。   在修改后的代码中,我们会将警报作为清理操作的一部分。// FILENAME -> useLocation.js // This is the hook that we will be running on each page import { useEffect } from "react"; const useLocation = (pathname) => { useEffect(() => { /* * If the pathname is same as current page path, perform some operation * For this example, the operation is to alert the user * only if pathname passed and window.location.pathname are equal */ if (pathname === window.location.pathname) { // MODIFIED CODE HERE -> removed alert from this condition // doSomeOperation() } // MODIFIED CODE HERE -> CLEANUP OPERATION // Added the same alert here return () => { alert( `On Page -> , pathname -> ${pathname}, window.location.pathname -> ${window.location.pathname}` ); } }, [pathname, window.location.pathname]); }; export default useLocation;   现在让我们看看交互   当我们导航到其他页面时,主页效果已经完成运行并运行清理操作。   虽然我们希望路径和路径名相同,但在警报中我们有路径名 -> ‘/’ 和 window.location.pathname -> ‘/other’。   发生这种情况是因为 window.location.pathname 在清理操作开始时发生了变化。   当我们从其他页面导航回主页时,也会发生同样的事情。 解决方案   让我们修改代码以在依赖项中不使用 window.location.pathname ,而是使用钩子中定义的局部变量。// FILENAME -> useLocation.js // This is the hook that we will be running on each page import { useEffect } from "react"; const useLocation = (pathname) => { // MODIFIED CODE HERE -> Assigned path = window.location.pathname // Use this variable across the hook const path = window.location.pathname; useEffect(() => { /* * If the pathname is same as current page path, perform some operation * For this example, the operation is to alert the user * only if pathname passed and path are equal */ if (pathname === path) { // doSomeOperation() } return () => { alert( `On Page -> , pathname -> ${pathname}, window.location.pathname -> ${path}` // Use path instead of window.location.pathname ); } }, [pathname, path]); }; export default useLocation;   现在让我们看看交互   应用修复后,我们可以看到我们获得了正确且一致的值。   这是可行的,因为路径是每个hook实例的局部变量。 虽然它在初始化时被分配给 window.location.pathname,但只有在重新渲染时才会重新分配。   你遇到过这样的问题吗! 请在评论中让我知道!

1950年统一之战,集结65万大军,苦心备战2年,到底被谁阻止?1950年,大将粟裕麾下的65万大军枕戈待旦,解放台湾已经箭在弦上,一触即发的战争为何戛然而止?苦心准备了两年的登台作战计划被谁耽误?究竟发生了怎样的变动?解放台湾,中国领土完整的大唐盛世到底有多开放?唐朝是中国历史上最繁荣最强大的时期,其开放程度也达到了封建王朝的顶峰。世人称赞唐朝是大唐盛世,万国来朝。大唐的特点最重要的一个,就是开放。那么唐朝到底有多开放?首先大唐的政治制度,1979年对越自卫反击战,邓公的一个命令,仅用28天让越南彻底认输读此文前,麻烦您点击一下关注,既方便您进行讨论与分享,又给您带来不一样的参与感,感谢您的支持。近些年来,除了中印边境上的摩擦,解放军上一次打仗还可以追溯到1979年的那场对越南的战结婚18年后,100岁的杨振宁变化不大,46岁的翁帆却像换个人18年前,著名物理学家杨振宁,和女研究生翁帆结为夫妻,一个是82岁高龄的耄耋老人,一个是年仅28岁的少女,54岁的巨大年龄差,让两人的婚姻受到了铺天盖地的质疑,也让杨振宁这位世界顶晚清老照片龟奴扛女子招摇过市去陪客,囚犯跪在铁链上受罚在晚清政府无能的统治下,人民处于水深火热之中,世态炎凉,街头巷尾,出现了许多如今看不到的画面。从晚清的一些老照片当中,可以看到,娼妓为讨生活,应召去陪客,还有受到刑罚的囚犯,跪在铁古代女囚被发配千里,官差为何抢着押送,女囚为什么比男囚受欢迎一人犯罪,全家遭殃,这是历代帝王为巩固其封建统治而默认的潜规则,诸如我们经常在影视剧中所看到的株连九族,满门抄斩等等。而我们今天所说的,就是古代刑罚中仅次于死刑以及充军的流放千里。埃安AIONY对比比亚迪元PLUS,15万级纯电SUV该选谁?随着技术的不断沉淀以及产业链的完善,国内的新能源汽车的发展逐渐从依靠政策驱动转变为市场自由发展,涌现了像比亚迪这样的新能源界的独角兽车企以及一众造车新势力,所生产的新能源汽车质量和致不可思议的量子诺贝尔物理学奖刚刚揭晓,瑞典当地时间2022年10月4日11时45分(北京时间10月4日17时45分),诺贝尔奖委员会宣布将2022年物理学奖颁给法国物理学家阿兰阿斯佩美国物理学家Windows11Moment1更新正式发布现已可下载微软已经开始推出之前承诺的Windows11的一批新功能。该更新又称Moment1,现在可用于所有运行Windows112022更新的合格系统,用户可以在微软的官方视频中查看Win第十代Ipad发布,真香机?第十代iPad发布,售价3599元起。配置搭载A14芯片10。9英寸非全贴合全面屏支持原彩显示升级TypeC充电口改用电源键指纹蜂窝版支持5G后置摄像头升级为1200万像素并支持4内卷?躺平?52白黑996,似乎有做不完的事,开不完的会,为什么会这样,有没有必要这样?作为一个IT攻城狮来说,似乎都是信息技术的错。因为信息技术的发达,让信息传递很快,过去车马很慢邮车也很慢
NBA揭幕战!我们熟悉的火箭登回来了苦等了几个月的NBA终于开始了,今天是NBA的揭幕战,东部是费城76人对阵凯尔特人。抛开本场比赛的输赢不说,我们熟悉的火箭登回来了。本场比赛76人三巨头合力没有击败绿军后场双枪,首穆雷首秀20115断老鹰揭幕战胜火箭老鹰揭幕战主场117107击败火箭。德章泰穆雷首秀得到20分11次助攻5次抢断。火箭让费尔南多取代申京进入首发。波特连续中距离,助攻杰伦格林空接上篮,之后杰伦格林打21,封盖特雷杨塞克斯顿20分,爵士七人得分上双大胜掘金NBA202223赛季常规赛,爵士主场123102大胜掘金。戈登连续得分掘金94开局,爵士突然下三分雨,克拉克森奥利尼克康利都中将比分反超。随后双方一阵交替得分,比斯利和马尔卡宁又火箭输了!二登哥在场赢8分,格林史密斯24铁,费尔南多7助攻3中3黑又硬费尔南多取代季前赛表现一般的森贡首发,戈登复出,史密斯内心还是很紧张的但嘴上却不承认,格林和小波特联手再出击对上老鹰双核。最终年轻的火箭输给了全主力的老鹰,遭遇了开门黑。首发火箭惜败老鹰!波特伊森戈登难救主,申京格林全崩,防守辣眼北京时间10月20号火箭和老鹰的比赛,这场比赛双方得到确实激烈,一直都无法拉开分差。不过老鹰始终占据着几分的优势,再加上关键时刻老鹰打出绝对的统治力,就此火箭107117输给了老鹰体操奇兵邹凯近况年少成名获体操女神青睐,今身居高位生活幸福2012年伦敦奥运会上,邹凯以出色的发挥拿下了男团和体操两枚金牌,加上他之前在2008年北京奥运会上获得的三枚金牌,他已经获得了5枚金牌,成为奥运5金王。同时,他也是中国体坛上,获辽宁某市个体户被查,罚款1973万!个体户有以下行为要注意了依据国家市场监督总局统计数据,截至9月末,全国实有市场主体持续增长,在册市场主体共计1。34亿户,较去年年底增长9。其中个体户9021。6万户,增长9。2。需要注意的是,个体经营很财经猎豹丨保险期货全面开花,生猪项目渐成主力现代快报讯(记者谷伟)扶贫助农的保险期货模式,正全面开花。现代快报记者了解到,近日中国期货业协会发布的期货行业服务实体经济数据概览显示,截至今年二季度,保险期货专业帮扶承保货值近5广州市天河区的新商场,就在3号线地铁站附近,刚开张已经很热闹这里是刘小顺的旅行和生活研究所。最近,我来到了广州市天河区的梅花园地铁站附近游玩,发现这里竟然开了一家大型的新商场,不禁引起我的好奇心。当我走近一看,发现这个大型的商业体原来名叫信广州新增10例本土确诊!一家医院发热门诊今日停诊据广州卫健委21日通报,2022年10月20日0时至24时,全市新增10例本土确诊病例,均在隔离观察人员排查中发现新增46例本土无症状感染者,其中39例在隔离观察人员排查中发现5例普尔威金斯相继续约,格林耿耿于怀在场上消极怠工引众怒北京时间10月19日,勇士主场迎来了洛杉矶湖人的队挑战。常规赛开幕式对勇士来说非常重要,追梦格林提前复出。本场比赛,勇士虽然大胜湖人队。但是作为防守核心的追梦格林怪怪的。本场比赛追