import { ReactNode } from 'react'; export interface BackEventControls { addEventListener: (...handlers: Array<() => void>) => void; removeEventListener: (...handlers: Array<() => void>) => void; } interface PrivateBackEventControls extends BackEventControls { handlersRef: Set<() => void>; hasBackEvent: boolean; onBack: () => void; } /** * @component * @name BackEventProvider * @description * 앱 내에서 뒤로 가기 이벤트를 처리하는 `Context`를 제공하는 컴포넌트예요. 이 컴포넌트를 사용해서 하위 컴포넌트들이 뒤로 가기 이벤트를 구독하고 관리할 수 있어요. 트리의 상위에 `BackEventProvider`를 배치해 모든 뒤로 가기 이벤트를 중앙에서 처리할 수 있게 해줘요. * * @param {ReactNode} children 뒤로 가기 이벤트를 제어 할 자식컴포넌트예요. * @param {BackEventControls} backEvent 뒤로 가기 이벤트를 처리하기 위한 제어 객체에요. `addEventListener` 메서드를 사용해 뒤로 가기 이벤트를 등록할 수 있고, `removeEventListener` 메서드를 사용해 등록된 뒤로 가기 이벤트를 제거 할 수 있어요. * @returns {JSX.Element} 뒤로 가기 이벤트를 처리할 수 있는 컴포넌트예요. * * 다음과 같이 `BackEventProvider`를 추가하면, 자식 컴포넌트가 뒤로 가기 이벤트를 처리할 수 있어요. * * @example * ```jsx * const backEventControls = { * addEventListener: (handler) => { ... }, * removeEventListener: (handler) => { ... }, * }; * * * * * ``` */ export declare function BackEventProvider({ children, backEvent, }: { children: ReactNode; backEvent: PrivateBackEventControls; }): import("react/jsx-runtime").JSX.Element; /** * @name useBackEventState * @description * 현재 `BackEventProvider`에서 관리 중인 뒤로 가기 이벤트 상태와 제어 메서드를 반환하는 훅이에요. 이 훅을 사용해 뒤로 가기 이벤트 핸들러를 추가하거나 제거할 수 있고, 현재 상태를 조회할 수 있어요. * * @returns {{ handlers: Array<() => void>, backEvent: BackEventControls, routerProps: { canGoBack: boolean, onBack: () => void } }} 뒤로 가기 이벤트 핸들러 배열, 이벤트 제어 메서드인 `backEvent`, 그리고 라우터에서 뒤로 가기 기능을 처리할 때 사용할 수 있는 `routerProps`를 반환해요. * * 이 Hook을 사용해 뒤로 가기 이벤트 핸들러를 추가하거나 제거하고, 라우터와 연동할 수 있어요. * * @example * ```javascript * const { backEvent, routerProps } = useBackEventState(); * // routerProps를 통해 라우터에서 뒤로 가기 이벤트를 처리 * backEvent.addEventListener(() => { * console.log('뒤로 가기 이벤트 발생'); * }); * * return ( * * * * ); * * ``` */ export declare function useBackEventState(): PrivateBackEventControls; /** * @public * @category 화면 제어 * @name useBackEvent * @description * 뒤로 가기 이벤트를 등록하고 제거할 수 있는 컨트롤러 객체를 반환하는 Hook이에요. 이 Hook을 사용하면 특정 컴포넌트가 활성화되었을 때만 뒤로 가기 이벤트를 처리할 수 있어요. * `addEventListener` 를 쓰면 뒤로 가기 이벤트를 등록할 수 있고, `removeEventListener` 를 쓰면 뒤로 가기 이벤트를 제거할 수 있어요. * 사용자가 화면을 보고 있을 때만 등록된 뒤로 가기 이벤트가 등록돼요. 화면을 보고 있다는 조건은 [useVisibility](/react-native/reference/react-native-bedrock/화면%20제어/useVisibility.md) 을 사용해요. * * 이 Hook을 사용해 특정 컴포넌트에서 뒤로 가기 이벤트를 처리하는 로직을 정의할 수 있어요. * * @returns {BackEventControls} 뒤로 가기 이벤트를 제어할 수 있는 객체예요. 이 객체에는 이벤트를 등록하는 `addEventListener` 메서드와와 제거하는 `removeEventListener` 메서드가 포함 되어 있어요. * * @throws {Error} 이 훅이 `BackEventProvider` 내에서 사용되지 않은 경우 에러를 발생시켜요. * * @example * * ### 뒤로 가기 이벤트 등록 및 제거 예제 * * - **"Add BackEvent" 버튼을 누르면 뒤로 가기 이벤트가 등록돼요.** 이후 뒤로 가기 버튼을 누르면 "back"이라는 알림이 뜨고, 실제로 뒤로 가지 않아요. * - **"Remove BackEvent" 버튼을 누르면 등록된 이벤트가 제거돼요.** 이후 뒤로 가기 버튼을 누르면 기존 동작대로 정상적으로 뒤로 가요. * * ```tsx * import { useEffect, useState } from 'react'; * import { Alert, Button, View } from 'react-native'; * import { useBackEvent } from 'react-native-bedrock'; * * export function UseBackEventExample() { * const backEvent = useBackEvent(); * * const [handler, setHandler] = useState<{ callback: () => void } | undefined>(undefined); * * useEffect(() => { * const callback = handler?.callback; * * if (callback != null) { * backEvent.addEventListener(callback); * * return () => { * backEvent.removeEventListener(callback); * }; * } * * return; * }, [backEvent, handler]); * * return ( * *