mingg IT

[React] MUI Skeleton 적용하기 본문

FrontEnd

[React] MUI Skeleton 적용하기

mingg123 2023. 2. 27. 21:03

프론트엔드를 개발하면서 한 번쯤은 API가 느린 경우를 마주친 적이 있을 것이다.
 
가장 베스트는 API 가 조금이라도 빠른게 좋지만 우선 사용자에게 조금이라도 편안하게 보여주기 위해 
 
Skeleton을 적용했다.
 
우선 적용 전과 적용 후를 보여주겠다.
 

적용 전

 
 
 

적용 후

 
 
확실히 적용하고 난 이후가 훨씬 보기 더 편해진 것을 확인할 수 있다.
 
우선 나는 MUI를 이용했기 때문에, MUI에서 제공하는 Skeleton 컴포넌트를 사용했다.
Skeleton 컴포넌트를 사용하기 전에, Suspense로 한번 감싸줘야 한다.

import React, { Suspense } from 'react';	

return (
	<Suspense fallback={<SkeletonComponent />}>
            <TabInfoComponent />
    	</Suspense>
);


export const SkeletonComponent = () => {
	return (
		<>
			<Tabs variant='fullWidth'>
				<TabSkeleton />
				<TabSkeleton />
			</Tabs>
			<TabPanel
				value={0}
				index={0}>
				<Stack>
					<BoxSkeleton />
					<BoxSkeleton />
				</Stack>
			</TabPanel>
		</>
	);
};

const TabSkeleton = () => {
	return (
		<Tab
			sx={{ flex: 1 }}
			label={
				<Skeleton
					animation='wave'
					sx={{ height: 20, width: 70 }}
				/>
			}
		/>
	);
};

export const BoxSkeleton = () => {
	return (
		<Box>
			<ImageBox>
				<Skeleton
					animation='wave'
					sx={{ height: 100, width: 66}}
				/>
			</ImageBox>
			<Stack>
				<Skeleton
					animation='wave'
					sx={{ height: 80 }}
				/>
			</Stack>
		</Box>
	);
};

Skeleton에서 animation='wave'를 이용하게 되면, 로딩 중인 상황을 더 이쁘게 보여주는 것 같아서 적용했다. 
 
사실 MUI를 이용해서 편하게 적용했지만 처음엔 MUI에서 지원해 주는 게 있는지 모르고 css로 손보고 있었다.
 

Comments