useCopyToClipboard
將文本複製到用戶的剪貼板。
useCopyToClipboard 透過與 useClipboard 相同的實作封裝 Clipboard API,回傳已複製的文字、copy 函式和 isSupported 狀態。
使用場景
- 當你偏好
useCopyToClipboard命名慣例時,新增「複製到剪貼簿」功能 - 從使用此命名模式的其他 hook 函式庫遷移
- 透過這個關聯的 hook 名稱使用
useClipboard的行為
注意事項
- SSR 安全:在伺服器端渲染時回傳空字串、複製函式和
false。伺服器上不會存取navigator。 - 瀏覽器支援:
isSupported只表示navigator.clipboard是否可用。需要時,複製仍會降級到document.execCommand("copy")。 - 權限:某些瀏覽器需要使用者授權才能存取 Clipboard API。可搭配
usePermission檢查clipboard-read和clipboard-write狀態。
用法
Live Editor
function Demo() { const [value, setValue] = useState(""); const [text, copy, isSupported] = useCopyToClipboard(); const permissionRead = usePermission("clipboard-read"); const permissionWrite = usePermission("clipboard-write"); return ( <div> <p> 剪貼板權限: 讀取 <b>{permissionRead}</b> | 寫入 <b>{permissionWrite}</b> </p> <p> Clipboard API 支援: <b>{isSupported ? "是" : "否"}</b> </p> <p> 當前複製的內容: <code>{text || "無"}</code> </p> <input value={value} onChange={(event) => { setValue(event.currentTarget.value); }} /> <button onClick={() => copy(value)}>複製</button> </div> ); };
Result
API
useClipBoard
Returns
readonly [string, (txt: string) => Promise<void>, boolean]: 返回包含剪貼簿文字、複製函式和支援狀態的唯讀元組.