
๋ชจ๋ฐ์ผ ์ฑ์ ์ธ์ ๋ ์ธํฐ๋ท์ด ๋๋ ํ๊ฒฝ์์๋ง ์คํ๋์ง ์๋๋ค.
์งํ์ฒ , ์๋ฆฌ๋ฒ ์ดํฐ, ํด์ธ ๋คํธ์ํฌ ํ๊ฒฝ ๋ฑ์์
๋คํธ์ํฌ๊ฐ ๋๊ธฐ๊ฑฐ๋ ๋ถ์์ ํ ๊ฒฝ์ฐ๊ฐ ์์ฃผ ๋ฐ์ํ๋ค.
๊ทธ๋์ ์ฑ์ ์คํ๋ผ์ธ ์ํ์์๋ ์ต์ํ์ UX๋ฅผ ์ ๊ณตํ ์ ์์ด์ผ ํ๋ค.
์ด๋ฒ ๊ธ์ React Native์์ ๋คํธ์ํฌ ์ฐ๊ฒฐ ์ํ๋ฅผ ๊ฐ์งํ๊ณ ๋์ํ๋ ์ ๋ต์ ์ ๋ฆฌํ ๊ธ์ด๋ค.
npm install @react-native-community/netinfo
import NetInfo from '@react-native-community/netinfo';
useEffect(() => {
const unsubscribe = NetInfo.addEventListener((state) => {
console.log('isConnected:', state.isConnected);
console.log('connectionType:', state.type);
});
return () => {
unsubscribe();
};
}, []);
{
isConnected: true,
isInternetReachable: true,
type: 'wifi', // or 'cellular', 'none', ...
}
isConnected: ๋คํธ์ํฌ ์ฐ๊ฒฐ ์ฌ๋ถ isInternetReachable: ์ธํฐ๋ท ์ค์ ๋๋ฌ ๊ฐ๋ฅ ์ฌ๋ถ type: ์ฐ๊ฒฐ ๋ฐฉ์ (wifi, cellular, none ๋ฑ)const [isOffline, setIsOffline] = useState(false);
useEffect(() => {
const unsubscribe = NetInfo.addEventListener((state) => {
setIsOffline(!state.isConnected || !state.isInternetReachable);
});
return () => unsubscribe();
}, []);
{isOffline && (
<View style={{ backgroundColor: 'red', padding: 8 }}>
<Text style={{ color: 'white' }}>๐ด ๋คํธ์ํฌ ์ฐ๊ฒฐ์ด ๋๊ฒผ์ต๋๋ค</Text>
</View>
)}
โ
์ํ ๋ฐ์ฒ๋ผ ์๋จ์ ๋์ฐ๊ธฐ
โ
Navigation ๋ฐ์ Global Banner๋ก ์ฒ๋ฆฌํ๊ธฐ๋ ํจ
| ์ํฉ | ์ฒ๋ฆฌ ๋ฐฉ๋ฒ |
|---|---|
| API ์์ฒญ ์ ์คํจ | ์ํ ์ ์ฅ ํ ์ฌ์๋ ๋ฒํผ ์ ๊ณต |
| ์ฑ ์ง์ ์ ๋คํธ์ํฌ ์์ | ์๋ด ๋ฉ์์ง + pull to refresh UI |
| ์๋ ์ฌ์์ฒญ ํ์ | SWR, React Query์ retry ์ค์ ํ์ฉ |
NetInfo.fetch()๋ก ์ด๊ธฐ ์ํ ํ์ธ isConnected === true ์ฌ๋ isInternetReachable === false์ผ ์ ์์ (wifi ์ฐ๊ฒฐ but no ์ธํฐ๋ท) debounce ์ฒ๋ฆฌ ๊ถ์ฅ์์ ์ "์ธํฐ๋ท ์์ผ๋ฉด ๊ทธ๋ฅ ์ ๋์ง ๋ญ" ํ๊ณ ๋ฌด์ํ๋๋ฐ,
์ ์ ์
์ฅ์์ ์ฑ์ด ๋ป์ ๊ฑธ๋ก ๋ณด์ด๊ณ , ๋ถํธํ๋ค๋ ํผ๋๋ฐฑ์ด ๋ง์๋ค.
์ง๊ธ์ ์ฑ ์ ์ญ์์ ๋คํธ์ํฌ ์ํ๋ฅผ ๊ฐ์งํด์
์คํ๋ผ์ธ ๋ฐฐ๋, ๋ฐ์ดํฐ ์ฌ์๋, ์บ์ ๋ฐ์ดํฐ ์ ๊ณต ๋ฑ์ผ๋ก UX๋ฅผ ์ต๋ํ ์ ์งํ๊ณ ์๋ค.
๐ถ โ์ข์ ์ฑ์ ์ฐ๊ฒฐ์ด ๋๊ฒจ๋ ์ ์ ๋ฅผ ๋์ง ์๋๋ค.โ