UseFadeIn

서서히 나타나게 만든다. 말그대로 fadein

const useFadeIn = (duration = 1, delay = 0) => {
  const element = useRef();

  useEffect(() => {
    if (element.current) {
      //우리가 원하는 DOM을 가리킴
      const { current } = element;
      current.style.transition = `opacity ${duration}s ease-in-out ${delay}s`; //${}:문자열로 반환
      current.style.opacity = 1;
    }
  }, []);
  if (typeof duration !== "number" || typeof delay !== "number") {
    return;
  }

  return { ref: element, style: { opacity: 0 } };
};

const App = () => {
  const fadeInH1 = useFadeIn(1, 2);
  const fadeInP = useFadeIn(5, 10);
  return (
    <div className="App">
      <h1 {...fadeInH1}>Hello</h1>
      <p {...fadeInP}>Hello2</p>
    </div>
  );
};

return {ref:element,style:{opacity:0}};

opacity=>투명도, component가 mount되면 Hello가 opacity,ease-in-out에 따라 서서히 나타난다.

const App = () => {
  const fadeInH1 = useFadeIn(1, 2);
  const fadeInP = useFadeIn(5, 10);
  return (
    <div className="App">
      <h1 {...fadeInH1}>Hello</h1>
      <p {...fadeInP}>Hello2</p>
    </div>
  );
};

속성들이 참고돼서 reference,style가 들어온다.

UseNetwork

navigator가 online 또는 offline이 되는 것을 막아줌(고정느낌)

const useNetwork = (onChange) => {
  const [status, setStatus] = useState(navigator.onLine);

  const handleChange = () => {
    if (typeof onChange == "function") {
      onChange(navigator.onLine);
    }
    setStatus(navigator.onLine);
  };

  useEffect(() => {
    console.log("when");
    window.addEventListener("online", handleChange);
    window.addEventListener("offline", handleChange);
    return () => {
      window.removeEventListener("online", handleChange);
      window.removeEventListener("offline", handleChange);
    };
  }, []);
  return status;
};

const App = () => {
  const handleNetworkChange = (on) => {
    console.log(on ? "we just went online" : "we are offline");
  };
  const onLine = useNetwork(handleNetworkChange);
  return (
    <div className="App">
      <h1>{onLine ? "Online" : "Offline"}</h1>
    </div>
  );
};
const useNetwork =onChange=>{
  const [status,setStatus]=useState(navigator.onLine);

network 상태가 바뀔때마다 function을 부른다

navigator.online -> 웹사이트가 온라인인지 아닌지 True & False나타낸다.