diff --git a/packages/core/src/useClipboard/index.ts b/packages/core/src/useClipboard/index.ts index 15df8e40..fa1f019e 100644 --- a/packages/core/src/useClipboard/index.ts +++ b/packages/core/src/useClipboard/index.ts @@ -3,13 +3,20 @@ import { useEventListener } from '../useEventListener' import { defaultWindow } from '../utils/browser' import type { UseClipboard } from './interface' -export const useClipboard: UseClipboard = (): readonly [ +export const useClipboard: UseClipboard = (options = { read: false }): readonly [ string, (txt: string) => Promise, ] => { const [text, setText] = useState('') + const read = options.read ?? false + const updateText = useCallback(async () => { + // if read-only, do not run + if (read) { + return + } + // Check if document is focused before attempting to read clipboard if (!document.hasFocus()) { return @@ -23,7 +30,7 @@ export const useClipboard: UseClipboard = (): readonly [ // Handle cases where clipboard access is denied or unavailable console.warn('Failed to read clipboard:', error) } - }, []) + }, [read]) useEventListener('copy', updateText) useEventListener('cut', updateText) diff --git a/packages/core/src/useClipboard/interface.ts b/packages/core/src/useClipboard/interface.ts index be301b58..ee169867 100644 --- a/packages/core/src/useClipboard/interface.ts +++ b/packages/core/src/useClipboard/interface.ts @@ -4,4 +4,6 @@ * @returns 返回只读元组. * @returns_zh-Hant 返回唯讀元組. */ -export type UseClipboard = () => readonly [string, (txt: string) => Promise] +export type UseClipboard = (options?: { + read?: boolean +}) => readonly [string, (txt: string) => Promise]