React 条件渲染(移动视图和桌面视图)问题
React condtional render (mobile view and Desktop view ) issue
谁能帮帮我?当此代码加载到移动视图时,它会显示桌面视图几毫秒,然后显示移动视图。任何人都可以纠正我的代码吗?提前致谢。
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>
}
</>
);
谁能帮帮我?当此代码加载到移动视图时,它会显示桌面视图几毫秒,然后显示移动视图。任何人都可以纠正我的代码吗?提前致谢。
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>
}
</>
);