Hook’lar ve konsol REPL’i
useInput, useFocus, useViewport, useConsoleStats ve window.text.
Hook’lar bileşenleri girdiye, odağa ve görünüm alanına bağlar.
useInput
useInput((e) => { if (e.key === "up") setIndex((i) => i - 1); if (e.ctrl && e.key === "p") setPaletteOpen(true);});| Alan | Açıklama |
|---|---|
key | "up" "return" "escape" "tab"… |
input | Tuşun ürettiği metin |
ctrl meta shift alt | Değiştirici tuşlar |
stopPropagation() | Daha düşük öncelikli işleyicileri durdurma |
⌘⌥J ve ⌘R gibi tarayıcı kısayolları her zaman engellenmeden geçer.
usePaste ve useWheel aynı seçenekleri alır. ambient seçeneğinin useWheel üzerinde etkisi yoktur.
| Seçenek | Açıklama |
|---|---|
isActive | false, bileşeni kaldırmadan işleyiciyi devre dışı bırakır (varsayılan true) |
priority | Daha yüksek öncelikler önce çalışır (varsayılan 0). Odaklanmış bileşenler FOCUSED_INPUT_PRIORITY (10) kullanır |
global | Bu bileşenin dışında bir <Modal> açıkken girdi almaya devam eder (varsayılan false) |
ambient | Bu işleyiciyi odak ipucu için hesaba katmaz (varsayılan false) |
Dev Overlay kısayolu (F2 veya Ctrl+`) ambient olarak işaretlidir; bu nedenle başka klavye girdisi olmayan bir sayfada ipucu gösterilmez.
useInput((e) => { if (e.key === "f2") toggleOverlay();}, { ambient: true });usePaste ve useWheel
usePaste((e) => insert(e.text));useWheel((e) => scrollBy(e.rows));useKeyState (deneysel)
@textjs/react/experimental, basılı tutulan fiziksel tuşları KeyboardEvent.code ("KeyW", "ArrowUp", "ControlLeft") ile izlemek için useKeyState hook’unu dışa aktarır. keys.isDown(code) değerini sorgulamak veya keys.pressed değerini okumak React’in yeniden render etmesini tetiklemez. Tuşlara basıldığı ve tuşlar bırakıldığı anda tepki vermek için bir geri çağırım geçirin.
import { useKeyState } from "@textjs/react/experimental";const keys = useKeyState((e) => { if (e.code === "Space" && e.down) fire();});Sayfa odağı kaybettiğinde basılı tutulan tuşlar otomatik olarak bırakılır. Deneysel dışa aktarımların nasıl sürümlendiği için Uyumluluğu bozan değişiklikler bölümüne bakın.
useViewport
const { cols, rows, focused, paused } = useViewport();usePageFocus
usePageFocus(), sayfanın odakta olup olmadığını döndürür. Tuş vuruşları uygulamaya ancak sayfa odaktayken ulaşır. useViewport().focused ile aynı değeri verir, ancak yalnızca odak değiştiğinde yeniden render eder.
const focused = usePageFocus();Sayfa odakta değilken uygulamada bir useInput veya usePaste işleyicisi, bir useKeyState hook’u ya da Tab ile ulaşılabilen bir odak hedefi varsa konsol karesinin son satırı, üzerinde “Klavyeyi kullanmak için sayfaya tıklayın” yazan kehribar rengi bir çubuğa dönüşür. ambient olarak işaretlenmiş işleyiciler hesaba katılmaz. İpucu terminalde, testlerde veya satır içi yansılarda görünmez. Sistemin azaltılmış hareket ayarı açık değilse ipucu her göründüğünde yaklaşık 6 saniye yanıp söner. Ne zaman görüneceğine kendiniz karar vermek için text.config.ts dosyasında veya createConsoleRoot içinde focusHint: false ayarlayın ve <FocusHint> render edin:
<FocusHint active={editing} />useConsoleStats
const { totalMs, spanCount } = useConsoleStats({ interval: 250 });useApp
const { exit, pause, resume } = useApp();window.text REPL’i
Her uygulama window.text nesnesine yardımcılar ekler. Bunları DevTools komut istemine yazın.
text.help()text.resize(120, 36) // pin the grid sizetext.responsive(true) // fit the docked console againtext.pause()text.stats()text.wireframe()text.copyText()