k8ordo
  • UI
  • Form
  • State
  • Router
  • Static
  • Server
ダークモードに切り替え
  • Get Started
  • Theming
  • i18n
  • Components
  • Hooks
  • Helpers
  • AI
ナビゲーションを開く
DOM操作
  • useClickAway
  • useHover
  • useResize
  • useScrollDirection
  • useScrollLock
  • useWindowResize
  • useWritingMode
状態・ストレージ
  • useClipboard
  • useControllableState
タイミング
  • useDebouncedTransition
  • useDeferredDebounce
  • useInterval
  • useTimeout
ユーティリティ
  • useBreakpoint
  • useClient
  • useDisclosure
  • useStep
  • useWindowSize
オブザーバー
  • useIntersectionObserver
  • useInView
k8ordo

Baselineに入った機能を、制限なく使うReactのライブラリ群。

パッケージ
  • @k8ordo/ui
  • @k8ordo/form
  • @k8ordo/state
  • @k8ordo/router
  • @k8ordo/static
  • @k8ordo/server
UI
  • Get Started
  • Theming
  • i18n
  • Components
  • Hooks
  • Helpers
  • AIチャット
  • Generative UI
  • AIエージェント
  • Storybook
リソース
  • GitHub
  • npm

© 2026 k8o — MIT License

組版 — Noto Sans JP / M PLUS 2

Hooks

DOM操作
  • useClickAway
  • useHover
  • useResize
  • useScrollDirection
  • useScrollLock
  • useWindowResize
  • useWritingMode
状態・ストレージ
  • useClipboard
  • useControllableState
タイミング
  • useDebouncedTransition
  • useDeferredDebounce
  • useInterval
  • useTimeout
ユーティリティ
  • useBreakpoint
  • useClient
  • useDisclosure
  • useStep
  • useWindowSize
オブザーバー
  • useIntersectionObserver
  • useInView

useDebouncedTransition

delay経過後にstartTransitionでアクションを実行するフック

インポート

使い方

基本的な使い方

縦書きプレビューに切り替え

パラメーター

delay
Type: number
Default: -
PropTypeDefault
delaynumber-

戻り値

[boolean, (action) => void]
Type: readonly [isPending: boolean, run: (action: (signal: AbortSignal) => void | Promise<void>) => void]
Default: -
PropTypeDefault
[boolean, (action) => void]readonly [isPending: boolean, run: (action: (signal: AbortSignal) => void | Promise<void>) => void]-

Type to run a mock API call after a 500ms debounce.

import { useDebouncedTransition } from '@k8ordo/ui';
const [query, setQuery] = useState('');
const [result, setResult] = useState('');
const [isPending, run] = useDebouncedTransition(500);

const handleChange = (e: ChangeEvent<HTMLInputElement>) => {
  const next = e.target.value;
  setQuery(next);
  run(async (signal) => {
    await sleep(800, signal);
    setResult(`Results for "${next}"`);
  });
};

return (
  <>
    <TextField value={query} onChange={handleChange} />
    <p aria-busy={isPending}>{isPending ? 'Loading…' : result}</p>
  </>
);