[TIL] useFadeIn 와 useScroll

useFadeIn

h1 태그와 p 태그에 각 duration과 delay를 주어 애니메이션을 구현하는 코드입니다.

import React, { useState, useEffect, useRef } from 'react'
import ReactDOM from 'react-dom'

const useFadein = (duration = 1, delay = 0) => {
  if (typeof duration !== 'number' || typeof delay !== 'number') {
    return
  }

  const element = useRef()
  useEffect(() => {
    if (element.current) {
      const { current } = element
      current.style.opacity = 1
      current.style.transition = `opacity ${duration}s ease-in-out ${delay}s`
    }
  }, [])
  return { ref: element, style: { opacity: 0 } }
}

const App = () => {
  const fadeInH1 = useFadein(3, 3)
  const fadeInP = useFadein(3, 7)
  console.log(fadeInH1)
  return (
    <div className="App">
      <h1 {...fadeInH1}>Hello</h1>
      <p {...fadeInP}>Wellcome! Nice too meet you!</p>
    </div>
  )
}

const rootElement = document.getElementById('root')
ReactDOM.render(
  <App />,

  rootElement
)

useScroll

Scroll 시 h1 태그 색상이 변경되는 코드입니다

const useScroll = () => {
  const [state, setState] = useState({
    x: 0,
    y: 0
  });
  const onScroll = () => {
    setState({y: window.scroll Y, x: window.scroll X});
  };
  useEffect(() => {
    window.addEventListener("scroll", onScroll);
    return () => window.removeEventListener("scroll", onScroll);
  }, []);
  return state;
};

useScroll() 함수를 만들고 return으로 state 값을 주며 useState()를 사용하여 state의 기본값으로 x, y에 0을 준다 마운트 되었을 때 이벤트가 실행되도록 useEffect()를 활용하며 한 번만 사용하기 위해 []를 추가하고 페이지 변경 시 이벤트가 삭제하게 return에 이벤트 삭제 코드를 추가한다

useScroll()에서 y 값을 받아와 h1의 style color에 삼항연산자를 사용하여 색상을 추가한다 (div에 1000vh를 추가한 이유는 스크롤을 하기 위해서다)

[최종코드]