diff --git a/personal-portfolio/src/components/Banner.js b/personal-portfolio/src/components/Banner.js index a813a6b3d..d7466e913 100644 --- a/personal-portfolio/src/components/Banner.js +++ b/personal-portfolio/src/components/Banner.js @@ -1,4 +1,4 @@ -import { useState, useEffect } from "react"; +import { useState, useEffect, useMemo } from "react"; import { Container, Row, Col } from "react-bootstrap"; import headerImg from "../assets/img/header-img.svg"; import { ArrowRightCircle } from 'react-bootstrap-icons'; @@ -11,52 +11,51 @@ export const Banner = () => { const [text, setText] = useState(''); const [delta, setDelta] = useState(300 - Math.random() * 100); const [index, setIndex] = useState(1); - const toRotate = [ "Web Developer", "Web Designer", "UI/UX Designer" ]; + const memoizedValue = useMemo(() => { return [ "Web Developer", "Web Designer", "UI/UX Designer" ] }, []); const period = 2000; - + useEffect(() => { let ticker = setInterval(() => { + const tick = () => { + let i = loopNum % memoizedValue.length; + let fullText = memoizedValue[i]; + let updatedText = isDeleting ? fullText.substring(0, text.length - 1) : fullText.substring(0, text.length + 1); + + setText(updatedText); + + if (isDeleting) { + setDelta(prevDelta => prevDelta / 2); + } + + if (!isDeleting && updatedText === fullText) { + setIsDeleting(true); + setIndex(prevIndex => prevIndex - 1); + setDelta(period); + } else if (isDeleting && updatedText === '') { + setIsDeleting(false); + setLoopNum(loopNum + 1); + setIndex(1); + setDelta(500); + } else { + setIndex(prevIndex => prevIndex + 1); + } + } tick(); }, delta); - return () => { clearInterval(ticker) }; - }, [text]) - - const tick = () => { - let i = loopNum % toRotate.length; - let fullText = toRotate[i]; - let updatedText = isDeleting ? fullText.substring(0, text.length - 1) : fullText.substring(0, text.length + 1); - - setText(updatedText); - - if (isDeleting) { - setDelta(prevDelta => prevDelta / 2); - } - - if (!isDeleting && updatedText === fullText) { - setIsDeleting(true); - setIndex(prevIndex => prevIndex - 1); - setDelta(period); - } else if (isDeleting && updatedText === '') { - setIsDeleting(false); - setLoopNum(loopNum + 1); - setIndex(1); - setDelta(500); - } else { - setIndex(prevIndex => prevIndex + 1); - } - } + }, [delta, isDeleting, loopNum, text, memoizedValue]) + return (
- + {({ isVisible }) =>
Welcome to my Portfolio -

{`Hi! I'm Judy`} {text}

+

{`Hi! I'm Judy`} {text}

Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.

} diff --git a/personal-portfolio/src/components/Contact.js b/personal-portfolio/src/components/Contact.js index 2991ee338..8b93d4cc4 100644 --- a/personal-portfolio/src/components/Contact.js +++ b/personal-portfolio/src/components/Contact.js @@ -65,7 +65,7 @@ export const Contact = () => { onFormUpdate('firstName', e.target.value)} /> - onFormUpdate('lastName', e.target.value)}/> + onFormUpdate('lastName', e.target.value)}/> onFormUpdate('email', e.target.value)} /> diff --git a/personal-portfolio/src/components/NavBar.js b/personal-portfolio/src/components/NavBar.js index cce00e7d5..8092feb32 100644 --- a/personal-portfolio/src/components/NavBar.js +++ b/personal-portfolio/src/components/NavBar.js @@ -46,7 +46,7 @@ export const NavBar = () => {