Vanilla JSX के उदाहरण
अगर JSX DOM elements लौटाए तो?
ClickMe फ़ंक्शन एक बटन बनाता है और क्लिक की संख्या दिखाने की सुविधा देता है
- हर बार बटन पर क्लिक करने पर टेक्स्ट अपडेट होता है
export default function ClickMe() {
let i = 0;
const el = <button>Click me</button> as HTMLButtonElement;
el.onclick = (e) => {
el.textContent = `Clicked ${++i} times`;
};
return el;
}
पुन: उपयोग की क्षमता
ClickMe कॉम्पोनेंट को कई बार इस्तेमाल करके हर instance का अलग state रखा जा सकता है
import ClickMe from "./sample1.js";
export default () => <>
<p><ClickMe /></p>
<p><ClickMe /></p>
<p><ClickMe /></p>
</>;
इंटरैक्टिव DOM tree बनाना
TodoInput और TodoList क्लास का उपयोग करके todo list को मैनेज किया जा सकता है
- items जोड़े जा सकते हैं और क्लिक करके हटाए जा सकते हैं
function TodoInput(attrs: { add: (v: string) => void }) {
const input = <input /> as HTMLInputElement;
input.placeholder = 'Add todo item...';
input.onkeydown = (e) => {
if (e.key === 'Enter') {
attrs.add(input.value);
input.value = '';
}
};
return input;
}
class TodoList {
ul = <ul class='todolist' /> as HTMLUListElement;
add(v: string) {
const item = <li>{v}</li> as HTMLLIElement;
item.onclick = () => item.remove();
this.ul.append(item);
}
}
export default () => {
const list = new TodoList();
list.add('foo');
list.add('bar');
return <>
<TodoInput add={(v) => list.add(v)} />
{list.ul}
</>;
};
बड़े पैमाने के डेटा को प्रोसेस करना
FindNames फ़ंक्शन बड़े पैमाने के डेटा को प्रोसेस और फ़िल्टर करके नतीजे दिखाता है
- input value के अनुसार real-time में matching items अपडेट होते हैं
import { data } from "../fetch-dataset.js";
export default function FindNames() {
const status = <p style='margin:1em 0' /> as HTMLParagraphElement;
const results = <ul /> as HTMLUListElement;
const input = <input value='eri(c|k)a?' autocomplete='new-password' oninput={updateMatches} /> as HTMLInputElement;
updateMatches();
function updateMatches() {
const matched = (data.entries().filter(([k]) => k.match(input.value)).toArray());
const matches = (Iterator.from(matched).map(match => <Item regex={input.value} match={match} />).take(30));
results.replaceChildren(...matches);
status.textContent = `${matched.length} / ${data.size}`;
}
return <div class='sample4'>
{input}
{status}
{results}
</div>;
}
function Item(attrs: { match: [string, number], regex: string }) {
const [name, count] = attrs.match;
const total = <small style='color:#fff3'>({count})</small>;
return <li>
<span innerHTML={highlight(name, attrs.regex)} /> {total}
</li>;
}
function highlight(str: string, regex: string) {
if (!regex) return str;
const r = new RegExp(`(${regex})`, 'gi');
return str.replace(r, '<span class="match">$1</span>');
}
imlib का परिचय
imlib एक लाइब्रेरी है जिसे immaculatalibrary.com के लिए विकसित किया गया है
- इसका उपयोग minigamemaker.com और उस वेबसाइट को बनाने में किया गया है जिसे आप अभी पढ़ रहे हैं
- इसे इसलिए विकसित किया गया क्योंकि मौजूदा state पर्याप्त नहीं थी, और apps बनाने का यह सबसे पसंदीदा तरीका है
GN⁺ का सारांश
- यह लेख बताता है कि JSX का उपयोग करके DOM elements को सीधे कैसे बनाया और इंटरैक्ट किया जा सकता है
- यह दिखाता है कि virtual DOM का उपयोग किए बिना भी बड़े पैमाने के डेटा को कुशलता से कैसे प्रोसेस किया जा सकता है
imlib लाइब्रेरी apps को सरल और सहज तरीके से विकसित करने में मदद करती है
- मिलते-जुलते फीचर्स वाले अन्य प्रोजेक्ट्स में React, Vue.js आदि शामिल हैं
1 टिप्पणियां
Hacker News राय
प्रोजेक्ट में रुचि दिखाने के लिए धन्यवाद
अगर actual DOM nodes लौटाए जाएँ तो JSX का बड़ा फायदा खत्म हो जाता है
JSX की उत्पत्ति Facebook के XHP से हुई है
अंतिम उदाहरण Firefox में काम नहीं करता
Vanilla TSX से बहुत मिलता-जुलता है
Action Script 3 की याद दिलाता है
उदाहरण ऐसे components नहीं दिखाते जिनके props समय के साथ बदल सकते हैं
मैंने भी actual DOM nodes बनाने वाले jsx template expressions पर आधारित एक UI library बनाई है
JSX का आकर्षण समझ नहीं आता
Imba की सिफारिश की गई