इनपुट और कीमैप

कीबोर्ड से डिप्लॉयमेंट के बीच जाएं और ? हेल्प ओवरले जोड़ें।

इस अध्याय का ऐप आपके कंसोल में चल रहा है। ⌘⌥JCtrl+Shift+J⌘⌥KCtrl+Shift+K⌘⌥C से इसे खोलें (पहले डेवलपर सुविधाएं चालू करें), फिर इसे आज़माएं।
अध्याय देखें3:25

इस अध्याय में

  • `useInput`
  • कीमैप
  • हेल्प ओवरले
  • फ़ोकस

कीस्ट्रोक पेज पर छिपे एक इनपुट के ज़रिए आपके ऐप तक पहुंचते हैं, इसलिए पेज पर फ़ोकस होना चाहिए। इसीलिए हर Text.js ऐप आपसे पहले पेज पर क्लिक करने को कहता है। फ़ोकस मिलने के बाद, आप जो भी कुंजी दबाते हैं वह React तक पहुंचती है।

useInput

useInput वह लो-लेवल हुक है जिसका इस्तेमाल आपने अब तक किया है। इसे एक KeyEvent मिलता है, जिसमें नॉर्मलाइज़ की गई key ("up", "return", "escape"), input में टाइप किया गया अक्षर, और ctrl, alt, shift और meta होते हैं।

useInput((e) => {  if (e.ctrl && e.key === "k") openPalette();});

किसी कुंजी को ट्री में आगे के हैंडलर तक पहुंचने से रोकने के लिए e.stopPropagation() कॉल करें।

कीमैप

जब किसी स्क्रीन पर दो से ज़्यादा कुंजियां हों, तो उन्हें useKeymap से परिभाषित करें। बाइंडिंग स्ट्रिंग होती हैं: "up, k" का मतलब दोनों में से कोई एक कुंजी है, "g g" एक क्रम है, "ctrl+k" एक कॉर्ड है। लेबल वाली बाइंडिंग <KeyHelp>, <KeyHints> और कमांड पैलेट में भी दिखती हैं।

app/deployments/page.tsx+31tsx
जोड़ा गया: import { useState } from "react";जोड़ा गया: import { Box, KeyHelp, Text, useKeymap } from "@textjs/app";जोड़ा गया: import { DEPLOYMENTS } from "../../lib/deployments";जोड़ा गया: जोड़ा गया: export default function DeploymentsPage() {जोड़ा गया:   const [index, setIndex] = useState(0);जोड़ा गया:   const [open, setOpen] = useState(false);जोड़ा गया:   const move = (by: number) => setIndex((i) => Math.max(0, Math.min(DEPLOYMENTS.length - 1, i + by)));जोड़ा गया: जोड़ा गया:   useKeymap({जोड़ा गया:     "up, k": { label: "Previous deployment", run: () => move(-1) },जोड़ा गया:     "down, j": { label: "Next deployment", run: () => move(1) },जोड़ा गया:     enter: { label: "Toggle details", run: () => setOpen((o) => !o) },जोड़ा गया:     "g g": { label: "First deployment", run: () => setIndex(0) },जोड़ा गया:   });जोड़ा गया: जोड़ा गया:   return (जोड़ा गया:     <Box className="flex-row grow p-1 gap-2">जोड़ा गया:       <Box className="flex-col grow">जोड़ा गया:         {DEPLOYMENTS.map((d, i) => (जोड़ा गया:           <Box key={d.id} className="flex-row h-1 gap-2 px-1" backgroundColor={i === index ? "selection" : undefined}>जोड़ा गया:             <Text>{i === index ? "›" : " "}</Text>जोड़ा गया:             <Text bold={i === index} wrap="truncate-end">{d.commit}</Text>जोड़ा गया:           </Box>जोड़ा गया:         ))}जोड़ा गया:       </Box>जोड़ा गया:       {open && <Details deployment={DEPLOYMENTS[index]} />}जोड़ा गया:       <KeyHelp />जोड़ा गया:     </Box>जोड़ा गया:   );जोड़ा गया: }

फ़िलहाल DEPLOYMENTS, lib/deployments.ts फ़ाइल में एक सामान्य ऐरे है। अध्याय 6 में इसे रूट हैंडलर के पीछे ले जाया जाएगा।

हेल्प ओवरले

<KeyHelp /> हुक ? दबाए जाने पर एक मोडल खोलता है, जिसमें उस समय सक्रिय सभी लेबल वाली बाइंडिंग ग्रुप में दिखती हैं। कंसोल में ? दबाएं, फिर इसे बंद करने के लिए ? या q दबाएं। मोडल के अंदर की बाइंडिंग फ़ोकस को वहीं रखती हैं, इसलिए उसके बंद होने तक नीचे की सूची प्रतिक्रिया देना बंद कर देती है।

फ़ोकस

<Input>, <Select> और <Table> जैसे कंपोनेंट सिर्फ़ फ़ोकस होने पर कुंजियां स्वीकार करते हैं। Tab इनके बीच फ़ोकस बदलता है; useFocus() और useFocusManager() से आप खुद फ़ोकस बदल सकते हैं।

आज़माएं

यह अध्याय के अंत वाला Acme Deploys है, जो DevTools में चल रहा है। पैड पर क्लिक करें, फिर नीचे दी गई कुंजियां इस्तेमाल करें।

▼ 04 · इनपुट और कीमैप

कंसोल खोलें

⌘⌥J
CtrlShiftJ
⌘⌥K
CtrlShiftK
⌘⌥C

ऐप DevTools में रेंडर होता है।पहले Safari की सेटिंग → एडवांस में “वेब डेवलपर के लिए सुविधाएं दिखाएं” चालू करें। फिर यहां क्लिक करें और ↓ दबाएं।

डेस्कटॉप पर खोलें

यह ऐप DevTools कंसोल में रेंडर होता है, जिसके लिए डेस्कटॉप ब्राउज़र चाहिए।

क्विज़

2 सवाल

अध्याय पूरा करने के लिए हर सवाल का जवाब दें।

In useKeymap, what does the binding "g g" mean?

 

टाइप करने से पहले आप पेज पर क्लिक क्यों करते हैं?