react项目网页端适配(利用自定义hooks)

思路就是利用window的resize事件,监听窗口变化,再利用hooks函数,在生命周期创建前监听,在生命周期结束时取消监听。具体看代码

在这里插入图片描述
这个useLifecycles是react-use的一个模仿组件的componentDidMount,和componentWillUnmount。也可以利用useEffect(()=>{},[])代替,接着就是监听window的resize事件,然后触发serRemFunc函数。
再看看setRemFunc的实现。

思路是,封装一个类,传入设计稿大小,要转换的比例,如图

在这里插入图片描述
然后class上面定义一个方法,setRem,拿到最新的窗口大小,并计算将值赋予到html,style.fontSize上。这样就实现一个适配效果。
具体原理就是:
假设倍数为10,设计稿宽度为2000px,屏幕真实宽度为1000px。设计稿纸上一个有10px大小的字体A。
我们借助postcsss-loader帮助我们转换rem。
在这里插入图片描述
规则就是1rem=10px,webpack不知道我们屏幕的宽度,只会按照这个逻辑去转。
我们在1000px的屏幕上开发,写A的时候,依然写的是10px。他会被loader转为1rem。此时1000px伤的html.style.fontSize = 1000/2000 * 10 = 5px,所以在1000px的屏幕上,1rem就是5px。
在2000px上的时候,html.style.fontSize = 2000/2000 * 10 = 10px。所以在2000px上,1rem就是10px。以此达到适配的效果。
这个hooks只是用来改变每个屏幕的rem的大小,具体开发的时候,我们依然可以在1000px上的屏幕开发2000px的设计稿,px保持不变。因为postcss-loader会帮助我们转化为rem。rem通过hooks会在不同的屏幕上适配。
注意,这个postcss-loader转化rem的标准需要与
在这里插入图片描述
这个倍数一样。因为真实宽度/设计宽度只是计算出比例。1rem多少需要后面这个prem决定。

用的时候只需要实例出一个对象即可。在这里插入图片描述
第一次进去需要调用一次setRemFunc,初始化一下fontSize。

接着用的时候就直接在这里插入图片描述
引入并调用即可。
看看效果
在这里插入图片描述
可以看到,当我们窗口大小变化时就可以自适应了。

回答: React自定义Hooks是一种将组件逻辑提取到可重用的函数中的方式。它遵循一些规则,比如只能在最顶层使用Hooks,不能在循环、条件或嵌套中调用Hooks。同时,Hooks应该只在React函数(React函数组件、自定义Hooks组件)中使用,而不是在普通的JavaScript函数中使用。通过定义自定义Hooks,我们可以方便地封装逻辑,并在多个组件中复用。一个例子是使用自定义Hooks来设置网页标题。通过在组件中调用useTitle自定义Hooks,我们可以将页面的标题设置为指定的值,并且在组件卸载时将标题重置为默认值。另一个例子是使用自定义Hooks实现倒计时功能。通过定义一个useCountDown自定义Hooks,我们可以实时返回剩余时间,并在指定时间到达时执行回调函数。自定义Hooks是React中非常强大和灵活的功能,可以帮助我们更好地组织和复用组件逻辑。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [react 自定义hook](https://blog.csdn.net/weixin_38318244/article/details/123908672)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [react 中如何自定义hooks](https://blog.csdn.net/DDAD9527/article/details/121341862)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

coderlin_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值