https://stackblitz.com/edit/stackblitz-starters-rbdwkb?file=src%2FApp.js
Loading... -> Home 으로 바뀌게하는 hooks
import React, { useState, useEffect } from 'react';
import './style.css';
const useTitle = (initialTitle) => {
const [title, setTitle] = useState(initialTitle);
const updateTitle = () => {
const htmlTitle = document.querySelector('h1'); //h1 선택
htmlTitle.innerText = title; //h1의 내부txt를 title로
};
useEffect(updateTitle, [title]); //title이 바뀌면 실행
return setTitle;
};
export default function App() {
const titleUpdater = useTitle('Loading...'); //setTitle을 반환.
//titleUpadater는 setTitle임.
setTimeout(() => titleUpdater('home'), 2000);
return (
<div>
<h1></h1>
<p>Start editing to see some magic happen :)</p>
</div>
);
}
useTitle 훅은 title을 변경시키는 setTitle을 반환한다.
const titleUpdater = useTitle('Loading...')
에 의해 h1 초기값은 Loading
setTimeout(() => titleUpdater('home'), 2000);
titleUpdater('home')은 setTitle('home')과 같은 기능이다.
그래서 title이 바뀌면서 useEffect(updateTitle, [title])
이 실행됨.
useConfirm 훅은 message,callback, rejection 을 인자로 받아, confirm alert를 받은 후 확인/취소의 경우에 따라 callback/rejection의 함수를 실행합니다.
https://stackblitz-starters-ruxijx.stackblitz.io
import React from 'react';
import './style.css';
const useConfirm = (message = '', callback, rejection) => {
if (typeof callback !== 'function') {
return;
}
const confirmAction = () => {
if (confirm(message)) {//확인 누를시
callback();
} else {
rejection();
}
};
return confirmAction;
};
export default function App() {
const deleteWorld = () => console.log('삭제중.....');
const cancel = () => console.log('안지운다~');
const confirmDelete = useConfirm('진짜로 삭제할거에요?', deleteWorld, cancel);
return (
<div>
<h1>Hello StackBlitz!</h1>
<button onClick={confirmDelete}>삭제해보자</button>
</div>
);
}
useFadeIn 훅은 duration과 delay 인자를 받아 서서히 나타나게 해주는 hook입니다
훅의 return 값이 {ref:element,style:{opacity:0}}
이므로,
<p>
태그에 {...fadeInP}
이렇게 넣어줌
https://stackblitz-starters-9grehr.stackblitz.io
https://stackblitz-starters-sefhmf.stackblitz.io
useScroll 훅은 유저 scroll의 x와 y값 state을 return한다
이 scroll값은 onScroll함수에 의해 바뀐다
window scroll에 event를 추가했으므로, 스크롤을 할때마다 onScroll함수가 발동하고, 이에따라 state가 변하면서 scroll y값에 따라 색상을 변화시키는것이다.