【发布时间】:2021-04-23 10:42:28
【问题描述】:
我创建了一个函数,它正在侦听 resize 事件,它检查窗口宽度并更新我的 IsMobile 变量 if(width
代码如下:
import React, { useEffect, useState } from 'react';
export interface MechnicalLiftProps {
}
const MechnicalLift: React.SFC<MechnicalLiftProps> = () => {
const [IsMobile, setIsMobile] = useState(true)
const handleWindowChange = () => {
console.log('window inner width', window.innerWidth);
console.log('is mobile in handle', IsMobile);
if (window.innerWidth <= 600 && IsMobile === false) {
setIsMobile(true);
console.log('is mobile set to true');
}
if (window.innerWidth > 600 && IsMobile === true) {
setIsMobile(false);
console.log('is mobile set to false');
}
}
useEffect(() => {
console.log('mount running');
window.addEventListener('resize', handleWindowChange)
handleWindowChange()
return () => {
window.removeEventListener('resize', handleWindowChange)
}
}, [])
useEffect(() => {
console.log('is this mobile ', IsMobile);
}, [IsMobile])
return (
<div>
</div>
);
}
export default MechnicalLift;
我的控制台输出:
我觉得每次重新渲染组件时都会设置初始状态,否则为什么每次处理窗口更改时 IsMobile 都设置为 true,即使它多次设置为 false。 Hooks 新手请尽可能详细说明您的解释
【问题讨论】:
标签: reactjs react-hooks use-state react-functional-component