javascript - 反应条件渲染(移动视图和桌面视图)问题
问题描述
谁能帮帮我吗?当此代码在移动视图中加载时,它会显示桌面视图几毫秒,然后显示移动视图。有人可以更正我的代码吗?提前致谢。
class Header extends React.Component {
constructor(props) {
super(props);
this.state = {
isLarge:true
};
this.updatePredicate = this.updatePredicate.bind(this);
}
componentDidMount() {
this.updatePredicate();
window.addEventListener("resize", this.updatePredicate);
}
componentWillUnmount() {
window.removeEventListener("resize", this.updatePredicate);
}
updatePredicate() {
var size = window.innerWidth;
if(size>767) {
this.setState({ isLarge:true});
} else {
this.setState({ isLarge:false});
}
}
render() {
const {isLarge} = this.state;
return (
<div>
{isLarge ? (<DesktopMenu
categories={categories}
menuOpen={menuOpen}
openMenu={openMenu}/>)
: (<MobileMenu
categories={categories}
menuOpen={menuOpen}
openMenu=openMenu}/>)
}
</div>
);
}
}
解决方案
默认情况下,您的状态isLarge
设置为 true,因此即使对于这些毫秒,它也会呈现 DesktopView。
您可以使用值初始化您的状态undefined
,而不是默认值。
this.state = {
isLarge: undefined
};
然后检查值是否存在
return (
<>
{isLarge === undefined ? "Loading" :
<div>
{
isLarge ?
<DesktopMenu categories={categories}
menuOpen={menuOpen}
openMenu={openMenu}
/>
:
<MobileMenu categories={categories}
menuOpen={menuOpen}
openMenu={openMenu}
/>
}
</div>
}
</>
);
推荐阅读
- python - 如何将邮递员的不记名令牌读入 Python 代码?
- java - Jar 文件不在目标文件夹中工作,但在项目文件夹中工作
- c# - 文本字段中的防御者成本未显示
- java - 有没有办法在横向模式下将片段内的布局固定为纵向?
- visual-studio-2019 - Uno 平台:设计不显示
- javascript - 角度路由混淆/奇怪的行为
- sql - 检查一列是否有 1-100 作为值的 case 语句
- docker - Grafana - 将仪表板作为 docker-compose 的一部分导入
- jquery - 带有点击事件的小写和大写
- java - Arrays.sort() 与使用 map 进行排序