【发布时间】:2022-01-24 04:05:39
【问题描述】:
在我的学习中,我遇到了这个问题:
在下面这段代码中,我需要根据屏幕大小设置useState(false)。
如果大于 947px,例如,它会自动更改为 true。
因为如果我将其更改为“false”,我的 navlist(item:nth-child(3)) 不会显示在正常的屏幕宽度上,但它可以在小屏幕上正常工作。如果我将其更改为“true”,我的导航列表在普通屏幕上正常工作,但如果我更改为小屏幕,我的导航列表开始打开,这真的很烦我......
如果有任何类似的方法,请告诉我。
import Image from "next/image";
import styles from "../styles/Navbar.module.css";
import React, { useState } from 'react';
const Navbar = () => {
const [openMenu, setOpenMenu] = useState(false);
return (
<div className={styles.container}>
<div className={styles.item} onClick={() => setOpenMenu(!openMenu)}>
<div className={styles.line} style={{ transform: openMenu ? "rotate(-765deg) translate(-8px, 8px)" : "rotate(0) translateX(0)" }}></div>
<div className={styles.line} style={{ opacity: openMenu ? "0" : "1" }}></div>
<div className={styles.line} style={{ transform: openMenu ? "rotate(-855deg) translate(5px, 7px)" : "rotate(0) translateX(0)" }}></div>
</div>
<div className={styles.item}>
<div className={styles.call}>
<Image src="/img/telephone.png" alt="Telephone" width="32px" height="32px" />
</div>
<div className={styles.call}>
<div className={styles.text}>ORDER NOW!</div>
<div className={styles.text}>012 345 6789</div>
</div>
</div>
<div className={styles.item}>
<ul className={styles.list} style={{ transform: openMenu ? " translateX(0)" : "translateX(-100%)" }}>
<li className={styles.listItem} style={{
transform: openMenu ? " translateX(0)" : "translateX(-100%)",
opacity: openMenu ? "1" : "0"
}}><a href="#">Homepage</a></li>
<li className={styles.listItem} style={{
transform: openMenu ? " translateX(0)" : "translateX(-100%)",
opacity: openMenu ? "1" : "0"
}}><a href="#">Products</a></li>
<li className={styles.listItem} style={{
transform: openMenu ? " translateX(0)" : "translateX(-100%)",
opacity: openMenu ? "1" : "0"
}}><a href="#">Menu</a></li>
<li className={styles.listItem}><a href="#">
<Image src="/img/logo.png" alt="Logo" width="160px" height="69px" /></a>
</li>
<li className={styles.listItem} style={{
transform: openMenu ? " translateX(0)" : "translateX(-100%)",
opacity: openMenu ? "1" : "0"
}}><a href="#">Events</a></li>
<li className={styles.listItem} style={{
transform: openMenu ? " translateX(0)" : "translateX(-100%)",
opacity: openMenu ? "1" : "0"
}}><a href="#">Blog</a></li>
<li className={styles.listItem} style={{
transform: openMenu ? " translateX(0)" : "translateX(-100%)",
opacity: openMenu ? "1" : "0"
}}><a href="#">Contact</a></li>
</ul>
</div>
<div className={styles.item}>
<div className={styles.cart}>
<Image src="/img/cart.png" alt="Logo" width="30px" height="30px" />
<div className={styles.counter}>2</div>
</div>
</div>
</div>
)
}
export default Navbar
【问题讨论】:
-
您可以使用 useEffect 挂钩检查组件安装时的屏幕尺寸并将状态设置为 true 或 false
-
我会使用 CSS 和媒体查询来做到这一点,而不是内联 CSS 和 JavaScript。您可能还会看到更好的性能。