
๐ธ ์ค๋ณต๋๋ logic์ด ๊ทธ๋๋ก ์๋ ๊ฒฝ์ฐ(์ฌ์ฉ ์ํจ)
import React, {useState, useEffect} from 'react';
function UseState(props) {
const [isOnline, setIsOnline ] = useState(null);
function handleStatusChange(status) {
setIsOnline(status, isOnline);
}
useEffect(()=> {
ServerAPI.subscribeUserStatus(props.user.id handleStatusChange};
return() => {
ServerAPI.unsubscribeUserStatus(props.user.id handleStatusChange);
//์ปดํฌ๋ํธ๊ฐ unmount๋ ๋ ํธ์ถ๋จ!
};
});
return (
<li style = {{ color: isOnlie? 'green' : 'black' }}>
{props.user.name}
</li>
);
๐ธ ์ค๋ณต๋๋ logic์ customํ ๊ฒฝ์ฐ
import React, {useState, useEffect} from 'react';
function useUserStatus(userId) {
const [isOnline, setIsOnline ] = useState(null);
useEffect(()=> {
function handleStatusChange(Status){
setIsOnline(status, isOnline);
}
ServerAPI.subscribeUserStatus(user.id handleStatusChange};
return() => {
ServerAPI.unsubscribeUserStatus(user.id handleStatusChange);
//์ปดํฌ๋ํธ๊ฐ unmount๋ ๋ ํธ์ถ๋จ!
};
});
return isOnline;
๐ธ custom hook ์ฌ์ฉํ๊ธฐ
function UserStatus(props){
const isOnline = useUserStatus(props.user.id);
if(isOnline === null ){
return '๋๊ธฐ์ค..';
}
return isOnline ? '์จ๋ผ์ธ' : '์คํ๋ผ์ธ';
}
function UserListItem(props){
const isOnline = useUserStatus(props.user.id);
//custom hook ์ฌ์ฉ
return (
<li style = {{color: isOnline ? 'green' : 'black' }}>
{props.user.name}
</li>
);
}