Есть ли способ исправить компонент при первом рендеринге, чтобы он был прозрачным в фоновом режиме в React JS?

#javascript #reactjs #tailwind-css

Вопрос:

Это мое Navbar.js компонент, который отображается цветным в верхней части страницы, затем, если я прокручу немного дальше, а затем вернусь к началу, он будет прозрачным в фоновом режиме

Здравствуйте, ребята, у меня возникла проблема с отображением навигационной панели, чтобы она была прозрачной при первой загрузке страницы, но при первой загрузке я получаю белый цвет фона. Я хочу, чтобы моя навигационная панель была прозрачной, тогда, если я немного прокрутю страницу вниз, она станет белой на заднем плане. Мой код в моей навигационной панели приведен ниже.

 import React,{useState,useEffect} from 'react';
import {Link} from 'react-router-dom';
import {motion} from 'framer-motion';

const showNavVariant = {
    hidden: {
        y:-500
    },
    visible: {
        y:0,
        transition: {
            type:'spring',
            stiffness:30
        } 
    }
}

const Navbar = () => {

    const [changeColor,setChangeColor] = useState(false);

    useEffect(() => {
        window.addEventListener('scroll',() => {
            if(window.scrollY === 0) {
                setChangeColor(true);
                console.log('Transparent')
            } else {
                setChangeColor(false);
                console.log('Colored');
            }
        });
    },[changeColor])
   

    return (
        <motion.nav className={changeColor ? 'flex justify-center bg-transparent w-full shadow-xl fixed text-gray-100 z-50' : 'flex justify-center bg-gray-100 h-16 opacity-90 w-full shadow-xl fixed z-50' }
        variants={showNavVariant}
        initial="hidden"
        animate="visible"
        >
            <div className="max-w-7xl w-full flex justify-between items-center px-5">

                <div className={changeColor ? "border-2 border-gray-100 text-gray-100 rounded p-5 m-2 ml-20" : "border-2 border-gray-800 rounded p-3 m-2 ml-20 text-gray-700"}>
                    <h1 className="font-bold">Milktea</h1>
                </div>

                <div className={changeColor ? "grid grid-rows-2" : "grid grid-rows-1"}>
                    <div className={changeColor ? 'flex justify-end px-20 py-4' : 'px-20 py-4 hidden'}>
                        <div className="flex px-10">
                            <svg className="w-6 h-6 text-gray-400" fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
                                <path d="M2.003 5.884L10 9.882l7.997-3.998A2 2 0 0016 4H4a2 2 0 00-1.997 1.884z" /><path d="M18 8.118l-8 4-8-4V14a2 2 0 002 2h12a2 2 0 002-2V8.118z" />
                            </svg>
                            <p className="text-yellow-500 ml-3 cursor-pointer">milkteashop@gmail.com</p>
                        </div>
                        <div className="grid grid-cols-2 gap-5 justify-items-center self-center text-gray-400">
                            <Link to="#" className="fa fa-facebook"></Link>
                            <Link to="#" className="fa fa-instagram"></Link>
                        </div>
                    </div>

                    <ul className="grid grid-cols-5 justify-items-center gap-5 px-10">
                        <Link className="navBtn" to="/">
                            <li>Home</li>
                        </Link>
                        <Link className="navBtn" to="/products">
                            <li>Products</li>
                        </Link>
                        <Link className="navBtn" to="/locations">
                            <li>Locations</li>
                        </Link>
                        <Link className="navBtn" to="/franchise">
                            <li>Franchise</li>
                        </Link>
                        <Link className="navBtn" to="#contact-us">
                            <li>Contact Us</li>
                        </Link>
                    </ul>
                </div>
            </div>
        </motion.nav>
    )
}

export default Navbar

 

Ответ №1:

Ваше начальное значение установлено как false,

 const [changeColor,setChangeColor] = useState(false);
 

Измените значение false на true, чтобы условие было истинным, и ваш прозрачный класс будет применен.