본문으로 건너뛰기

Snackbar

화면 상단에 일시적인 메시지를 표시하여 사용자에게 정보를 전달하는 컴포넌트입니다. 여러 개의 Snackbar를 동시에 표시할 수 있으며, 자동으로 사라집니다.

기본 사용법

import { useOverlay } from '@0610studio/zs-ui';

function MyComponent() {
const { showSnackBar } = useOverlay();

const handleShowSnackbar = () => {
showSnackBar({
message: '작업이 완료되었습니다.',
type: 'success',
});
};

return <Button title="Snackbar 표시" onPress={handleShowSnackbar} />;
}

API 참조

showSnackBar 함수

showSnackBar(props: ShowSnackBarProps): void

ShowSnackBarProps 인터페이스

PropTypeDefaultDescription
messagestringRequiredSnackbar에 표시할 메시지
typeSnackType'success'Snackbar의 유형 ('success', 'error', '')
indexnumberDate.now()Snackbar의 고유 식별자
snackbarDurationnumber3000Snackbar가 표시될 지속 시간 (밀리초)

SnackType 타입

type SnackType = 'success' | 'error' | '';

특징

  • 자동 사라짐: 지정된 시간 후 자동으로 사라집니다
  • 다중 표시: 여러 개의 Snackbar를 동시에 표시할 수 있습니다
  • 커스터마이징: OverlayProvider에서 커스텀 Snackbar 컴포넌트를 사용할 수 있습니다

예제

성공 메시지

import { useOverlay } from '@0610studio/zs-ui';

function MyComponent() {
const { showSnackBar } = useOverlay();

const handleSuccess = () => {
showSnackBar({
message: '저장되었습니다.',
type: 'success',
});
};

return <Button title="성공 메시지" onPress={handleSuccess} />;
}

에러 메시지

import { useOverlay } from '@0610studio/zs-ui';

function MyComponent() {
const { showSnackBar } = useOverlay();

const handleError = () => {
showSnackBar({
message: '오류가 발생했습니다.',
type: 'error',
});
};

return <Button title="에러 메시지" onPress={handleError} />;
}

일반 메시지

import { useOverlay } from '@0610studio/zs-ui';

function MyComponent() {
const { showSnackBar } = useOverlay();

const handleShowMessage = () => {
showSnackBar({
message: '알림 메시지',
type: '',
});
};

return <Button title="메시지 표시" onPress={handleShowMessage} />;
}

커스텀 지속 시간

import { useOverlay } from '@0610studio/zs-ui';

function MyComponent() {
const { showSnackBar } = useOverlay();

const handleShowMessage = () => {
showSnackBar({
message: '5초 동안 표시됩니다.',
type: 'success',
snackbarDuration: 5000,
});
};

return <Button title="메시지 표시" onPress={handleShowMessage} />;
}

고유 ID 지정

import { useOverlay } from '@0610studio/zs-ui';

function MyComponent() {
const { showSnackBar } = useOverlay();

const handleShowMessage = () => {
showSnackBar({
message: '메시지',
type: 'success',
index: 12345,
});
};

return <Button title="메시지 표시" onPress={handleShowMessage} />;
}

커스텀 Snackbar 컴포넌트

OverlayProvider에 커스텀 Snackbar 컴포넌트를 전달할 수 있습니다:

import { OverlayProvider, CustomSnackbarProps } from '@0610studio/zs-ui';
import { View, Text } from 'react-native';

function CustomSnackbar({ snackType, snackMessage }: CustomSnackbarProps) {
return (
<View style={{
backgroundColor: snackType === 'error' ? '#e74c3c' : '#2ecc71',
padding: 15,
borderRadius: 8,
}}>
<Text style={{ color: '#fff' }}>{snackMessage}</Text>
</View>
);
}

function App() {
return (
<OverlayProvider customSnackbar={CustomSnackbar}>
{/* 앱 내용 */}
</OverlayProvider>
);
}

Snackbar 닫기

import { useOverlay, useSnackbar } from '@0610studio/zs-ui';

function MyComponent() {
const { hideOverlay } = useOverlay();
const { hideSnackBar } = useSnackbar();

// 모든 Snackbar 닫기
const closeAll = () => {
hideOverlay('snack');
};

// 특정 Snackbar 닫기
const closeSpecific = (index: number) => {
hideSnackBar(index);
};

return (
<>
<Button title="모두 닫기" onPress={closeAll} />
<Button title="특정 닫기" onPress={() => closeSpecific(12345)} />
</>
);
}

최대 개수 제한

OverlayProvider에서 동시에 표시할 수 있는 Snackbar의 최대 개수를 설정할 수 있습니다:

<OverlayProvider maxSnackbarCount={5}>
{/* 앱 내용 */}
</OverlayProvider>