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

河南建设部网站官网重庆工程造价信息2021

河南建设部网站官网,重庆工程造价信息2021,企业网站的开发流程,如何免费网络营销推广因个人工作原因,在2023年学起了React TS 这个 “前端大佬” “高阶玩家” 标配的技术栈,一套学习下来个人总结就是:React真特么难用!传染病式的渲染逻辑是真让人难受!维护之前的代码就是深渊!难怪React项目…

因个人工作原因,在2023年学起了React + TS 这个 “前端大佬” “高阶玩家” 标配的技术栈,一套学习下来个人总结就是:React真特么难用!传染病式的渲染逻辑是真让人难受!维护之前的代码就是深渊!难怪React项目标配TS,没个TS给这货加点限制这玩意写出来的代码就更没法看了!——以上总结仅代表个人使用感受,至于React的设计如何牛逼,我感受不到,我也不配讨论,勿喷!

如何解决React组件抽风式的刷新问题,小编使用解释和源码示例的方式讲解一下

memo

  • 父组件属性变化都会导致子组件重新执行,即使传入子组件props没有任何变化,甚至子组件没有依赖于任何props属性,都会导致子组件重新渲染
  •  使用memo包裹子组件时,只有props发生改变子组件才会重新渲染,以提升一定的性能
// 子组件
// 若不适用 memo API,父组件每次跟新 time 时,子组件都会重新渲染,输出 'List 被渲染'
const List = memo((props:{list:Array<string>
})=>{console.log('List 被渲染')return (<><ol>{props?.list.map(item=>{return ( <li key={item}>{item}</li> )})}</ol></>)
})export default () => {const [ time,setTime ] = useState(0);const [ list,setList ] = useState<string[]>([]);useEffect(()=>{setTimeout(() => {setTime(time+1);}, 1000);},[time])return (<><h1>页面浏览时长:{time}秒</h1><List list={list} /></>);
};

useMemo

  • 父组件将一个值传递给子组件,若父组件的其他值发生变化时,子组件也会跟着渲染多次,会造成性能浪费; useMemo是将父组件传递给子组件的值缓存起来,只有当 useMemo中的第二个参数状态变化时,子组件才重新渲染
  • useMemo便是用于缓存该函数的执行结果,仅当依赖项改变后才会重新计算
// 子组件
const List = memo((props:{oddOrEven?:string,list:Array<string>
})=>{console.log('List 被渲染')return (<><h3>列表长度为:{props.oddOrEven}</h3><ol>{props?.list.map(item=>{return ( <li key={item}>{item}</li> )})}</ol></>)
})export default () => {  const [ time,setTime ] = useState(0);const [ list,setList ] = useState<string[]>([]);useEffect(()=>{setTimeout(() => {setTime(time+1);}, 1000);},[time])// 奇数或偶数// 当传递给子组件的值是通过函数返回的情况下,需要使用 useMemo Hookconst oddOrEven = useMemo(()=>{return (list.length % 2 === 0 ? '偶数':'奇数');},[list])return (<><h1>页面浏览时长:{time}秒</h1><List list={list} oddOrEven={oddOrEven} /></>);
};

useCallback

  • 父组件将一个方法传递给子组件,若父组件的其他状态发生变化时,子组件也会跟着渲染多次,会造成性能浪费; usecallback是将父组件传给子组件的方法给缓存下来,只有当 usecallback中的第二个参数状态变化时,子组件才重新渲染
  • 如果传入的props包含函数,父组件每次重新渲染都是创建新的函数,所以传递函数子组件还是会重新渲染,即使函数的内容还是一样,我们希望把函数也缓存起来,于是引入useCallback
// 子组件
const List = memo((props:{list:Array<number>,click:(number:any)=>void
})=>{console.log('List 被渲染')return (<><button type='button' onClick={()=>{const t = new Date().getTime();props.click(t);}}>添加</button><ol>{props?.list.map(item=>{return ( <li key={item}>{item}</li> )})}</ol></>)
})export default () => {const [ time,setTime ] = useState(0);const [ list,setList ] = useState<number[]>([]);useEffect(()=>{setTimeout(() => {setTime(time+1);}, 1000);},[time])// 若传递给子组件的属性有函数,需要使用 useCallback Hook,否则子组件发疯式的重新渲染const handleClick = useCallback((time:number)=>{setList([...list,time])},[list])return (<><h1>页面浏览时长:{time}秒</h1><List list={list} click={ handleClick } /></>);
};

useMemo 和 useEffect 区别

  • useEffect是在DOM改变之后触发,useMemo在DOM渲染之前触发
  • useEffect可以帮助我们在DOM更新完成后执行某些副作用操作,如数据获取,setState
  • 不要在这个useMemo函数内部执行与渲染无关的操作,诸如副作用这类的操作属于 useEffect 的适用范畴,而不是 useMemo
  • 在useMemo中使用setState你会发现会产生死循环,并且会有警告,因为useMemo是在渲染中进行的,你在其中操作DOM后,又会导致触发memo

小分享:我每次看完React文档后,我觉得我学会了,过一周后我发现自己还没学会。。这玩意坑到底还有多少,我醉了!

作者:黄河爱浪

本文原创,著作权归作者所有,转载请注明原链接及出处

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

相关文章:

  • 衡水企业网站制作公司wordpress 手机商城
  • 大型网站开发经典框架优化公司网站
  • 网站建设需求网生态环境工程公司网站建设
  • jquery网站右侧悬浮返回顶部带双二维码鼠标经过显示乐清网站开发
  • 四川省微信网站建设推广开发者app
  • 建设部网站官网考试桂林北站是高铁站吗
  • 网站页面设计主要包括凡科建站怎么样
  • 广州做公司网站的公司有哪些网站排名优化外包价钱
  • 微信网站开发公司电话wordpress分类指定页面
  • 数据共享网站建设莒县网页定制
  • 公司建立网站流程图购物网站代码
  • 成都网站建设创新互联广州商城网站建设报价
  • 旅游营销型网站建设企业邮箱地址怎么注册
  • 单位的网站的建设怎么做好网络销售技巧
  • 共享经济型网站开发网络营销有几种方式
  • 上海企业网站建设补贴Wordpress虚拟资源下载类主题
  • 给别人做网站的销售叫什么网络营销的网站建设报告
  • 中国做水产的有什么网站网站描述
  • 电子商务网站的作用全国最大网站建站公司
  • 做彩票网站违法的吗中职示范校建设网站
  • 做网站方面手机上怎么制作网站吗
  • 官方网站怎么制作1免费建站网站
  • 在网站上上传文件需要怎么做书荒小说阅读器是哪个网站做的
  • 江苏省交通工程建设局网站农产品网络营销渠道
  • 抖音代运营协议书范本谷歌网站优化工具
  • 网站设计公司山东烟台优衣库网站建设的目的
  • 从化五屏网站建设抖音代运营公司合法吗
  • 天津网站设计成功柚米wordpress 表结构
  • 个人网站备案icpwordpress 全部页面500
  • 前端静态网站模板下载做网站用的产品展示横幅