Today I Learned ... react.js
🙋♂️ *Reference Lecture
🙋 My Dev Blog
React Hooks 강의
componentDidMount
+ componentDidUpdate
를 합친 기능.-> componentDidMount, 즉 첫 렌더링시에는 무조건 실행됨.
-> deps가 바뀔때마다 (componentDidUpdate) 다시 실행됨.
const useTitle = (initialTitle) => {
const [title, setTitle] = useState(initialTitle);
const updateTitle = () => {
const htmlTitle = document.querySelector("title");
htmlTitle.innerText = title;
};
useEffect(updateTitle, [title]);
return setTitle;
};
const App = () => {
const titleUpdater = useTitle("Loading...");
setTimeout(() => titleUpdater("Home"), 5000);
return <div>hi</div>;
};
useEffect로 title이 바뀔 때마다 updateTitle 함수 실행.
-> htmlTitle.innerText = title;
아래와 같이 문서 title이 잘 변경되었다. (초기값으로 설정해준 'Loading...')
const App = () => {
const titleUpdater = useTitle("Loading...");
setTimeout(() => titleUpdater("Home"), 5000);
return <div>hi</div>;
};
const inputRef = useRef();
inputeRef.current.focus();
useClick.js
const useClick = (onClick) => {
const element = useRef();
useEffect(() => {
if (typeof onClick !== 'function') {
return;
}
if (element.current) {
element.current.addEventListener("click", onClick);
}
return () => {
if (element.current) {
element.current.removeEventListener("click", onClick)
}};
}, [onClick]); // 최초 렌더링시 한번만 실행되게
return element;
};
const App = () => {
const title = useClick(() =>{ console.log('hello'))});
return (
<div>
<h1 ref={title}>Title</h1>
</div>
);
};