(토요일에도 18시간 정도 했는데 update되지 않은 시간이다.)
(출처: https://react.vlpt.us/basic/25-lifecycle.html, https://kyun2da.dev/react/%EB%A6%AC%EC%95%A1%ED%8A%B8-%EB%9D%BC%EC%9D%B4%ED%94%84%EC%82%AC%EC%9D%B4%ED%81%B4%EC%9D%98-%EC%9D%B4%ED%95%B4/,
https://guiyomi.tistory.com/21)
Hooks 는 리액트 v16.8 에 새로 도입된 기능이며, 함수형태의 컴포넌트에서 사용되는 몇 가지 기술을 Hook이라고 부른다.
사용 규칙
State Hook (useState)
함수 컴포넌트 state를 추가하여, 다시 렌더링 되어도 그대로 유지
useState는 현재의 state 값과 이 값을 업데이트하는 함수를 쌍으로 제공
이벤트 핸들러나 다른 곳에서 호출 가능; class의 this.setState와 거의 유사하지만, 이전 state과 새로운 state를 합치지 않는다는 차이점이 있다.
import React, { useState } from 'react';
function Example() {
// "count"라는 새 상태 변수를 선언합니다
const [count, setCount] = useState(0);
return (
<div>
<p>You clicked {count} times</p>
<button onClick={() => setCount(count + 1)}>
Click me
</button>
</div>
);
}
useState는 인자로 초기 state 값을 하나 받는데, count는 0부터 시작하기 때문에 위 예시에서는 초기값으로 0 설정. 이 초기값은 첫 번째 렌더링에만 딱 한번 사용
import React, { useState, useEffect } from 'react';
function FriendStatus(props) {
const [isOnline, setIsOnline] = useState(null);
function handleStatusChange(status) {
setIsOnline(status.isOnline);
}
useEffect(() => {
ChatAPI.subscribeToFriendStatus(props.friend.id, handleStatusChange);
return () => { //해제하는 함수 반환
ChatAPI.unsubscribeFromFriendStatus(props.friend.id, handleStatusChange);
};
});
if (isOnline === null) {
return 'Loading...';
}
return isOnline ? 'Online' : 'Offline';
}
React는 DOM을 바꾼 뒤에 “effect” 함수를 실행하고, Effects는 컴포넌트 안에 선언되어있기 때문에 props와 state에 접근할 수 있다. 기본적으로 첫 번째 렌더링도 포함하여 매 렌더링 이후에 effects가 실행된다.
Effect를 “해제”할 필요가 있다면, 해제하는 함수를 반환해준다.(이는 optional)
(출처: https://devbirdfeet.tistory.com/52, https://ko.reactjs.org/docs/hooks-overview.html)
skip