Appearance
공통 네비게이션바
지원환경: React NativeWebView
실행환경: Toss AppSandbox App
상단 공통 네비게이션바에 아이콘 추가하는 방법을 안내드려요.
React Native:
useTopNavigation()
의addAccessoryButton()
으로 런타임에 버튼을 추가하거나,granite.config.ts
의navigationBar.initialAccessoryButton
으로 초기에 한 개를 노출할 수 있어요.WebView:
partner.addAccessoryButton()
으로 런타임에 버튼을 추가하고, 클릭 이벤트는tdsEvent.addEventListener('navigationAccessoryEvent')
로 받아요. 초기 노출은 web용 defineConfig의navigationBar.initialAccessoryButton
을 사용해요.
시그니처
typescript
interface NavigationBarOptions {
withBackButton?: boolean;
withHomeButton?: boolean;
initialAccessoryButton?: InitialAccessoryButton; // 1개만 노출 가능
}
interface InitialAccessoryButton {
id: string;
title?: string;
icon: {
name: string;
};
}
예제
네비게이션 바에 아이콘 버튼 추가하기 (초기 설정)
tsx
import { defineConfig } from '@apps-in-toss/web-framework/config';
export default defineConfig({
// ...
navigationBar: {
withBackButton: true,
withHomeButton: true,
initialAccessoryButton: {
id: 'heart',
title: 'Heart',
icon: {
name: 'icon-heart-mono',
},
}
},
});
tsx
import { appsInToss } from '@apps-in-toss/framework/plugins';
import { defineConfig } from '@granite-js/react-native/config';
export default defineConfig({
// ...
navigationBar: {
withBackButton: true,
withHomeButton: true,
initialAccessoryButton: {
icon: {
name: 'icon-heart-mono',
},
id: 'heart',
title: '하트',
},
},
}),
],
});
네비게이션 바에 아이콘 추가하기 (동적 추가)
tsx
import { partner, tdsEvent } from '@apps-in-toss/web-framework'
// ...
useEffect(() => {
partner.addAccessoryButton({ // 하트 아이콘 버튼 추가
id: 'heart',
title: '하트',
icon: {
name: 'icon-heart-mono',
},
});
// 네비게이션 액세서리 버튼 클릭 이벤트 리스너 등록
const cleanup = tdsEvent.addEventListener('navigationAccessoryEvent', {
onEvent: ({ id }) => {
if (id === 'heart') {
console.log('버튼 클릭');
}
},
});
return cleanup;
}, []);
tsx
import { useTopNavigation } from '@apps-in-toss/framework';
// ...
const { addAccessoryButton } = useTopNavigation();
addAccessoryButton({ // 하트 아이콘 버튼 추가
title: '하트',
icon: {
name: 'icon-heart-mono',
},
id: 'heart',
onPress: () => console.log('버튼 클릭'),
});