| title | React DOM Components |
|---|
React সকল প্রকার ব্রাউজার বিল্ট-ইন HTML এবং SVG কম্পোনেন্ট সাপোর্ট করে।
সকল বিল্ট-ইন ব্রাউজার কম্পোনেন্ট কিছু প্রপ এবং ইভেন্ট সাপোর্ট করে।
এর মধ্যে রয়েছে React-specific প্রপ যেমন ref এবং dangerouslySetInnerHTML।
এই বিল্ট-ইন ব্রাউজার কম্পোনেন্টগুলো ইউজার ইনপুট গ্রহণ করে।
তারা React এর মধ্যে বিশেষ কারণ তাদের কাছে value প্রপ পাঠানোর বিষয়টা তাদেরকে নিয়ন্ত্রিত বানায়।
এই বিল্ট-ইন ব্রাউজার কম্পোনেন্টগুলি আপনাকে বাহ্যিক রিসোর্স লোড করতে অথবা ডকুমেন্টে মেটাডেটা দিয়ে মার্ক করতে দেয়:
React-এ এগুলি বিশেষ কারণ React এগুলিকে ডকুমেন্টের হেডে রেন্ডার করতে পারে, রিসোর্স লোড হওয়া অবধি সাসপেন্ড করতে পারে, এবং প্রতিটি বিশেষ কম্পোনেন্টের জন্য রেফারেন্স পেজে বর্ণিত অন্যান্য আচরণ সম্পাদন করতে পারে।
React সকল বিল্ট-ইন ব্রাউজার HTML কম্পোনেন্ট সাপোর্ট করে। এর মধ্যে রয়েছেঃ
<aside><audio><b><base><bdi><bdo><blockquote><body><br><button><canvas><caption><cite><code><col><colgroup><data><datalist><dd><del><details><dfn><dialog><div><dl><dt><em><embed><fieldset><figcaption><figure><footer><form><h1><head><header><hgroup><hr><html><i><iframe><img><input><ins><kbd><label><legend><li><link><main><map><mark><menu><meta><meter><nav><noscript><object><ol><optgroup><option><output><p><picture><pre><progress><q><rp><rt><ruby><s><samp><script><section><select><slot><small><source><span><strong><style><sub><summary><sup><table><tbody><td><template><textarea><tfoot><th><thead><time><title><tr><track><u><ul><var><video><wbr>
DOM স্ট্যান্ডার্ড এর মতোই React প্রপের নামের জন্য camelCase রীতি অনুসরণ করে। উদাহরণস্বরূপ, আপনি tabindex এর জায়গায় লিখবেন tabIndex। আপনি online converter ব্যবহার করে বিদ্যমান HTML কে JSX এ রূপান্তরিত করতে পারবেন।
আপনি যদি dash সহ একটি ট্যাগ রেন্ডার করেন, যেমন <my-element>, React ধরবে আপনি একটি custom HTML element রেন্ডার করতে চাইছেন।
আপনি যদি is এট্রিবিউট সহ একটি ব্রাউজার বিল্ট-ইন HTML এলিমেন্ট রেন্ডার করেন, তবে এটিকে একটি কাস্টম এলিমেন্ট হিসাবে গণ্য করা হবে।
কাস্টম এলিমেন্টে ডেটা পাঠানোর দুটি উপায় আছে:
- Attributes: যেগুলো markup-এ দেখা যায় এবং কেবল string মানেই সেট করা যায়
- Properties: যেগুলো markup-এ দেখা যায় না এবং যেকোনো JavaScript মানে সেট করা যায়
ডিফল্টভাবে, React JSX-এ bind করা মানগুলোকে attributes হিসেবে পাঠায়:
<my-element value="Hello, world!"></my-element>স্ট্রিং নয় এমন জাভাস্ক্রিপ্ট ভ্যালু কাস্টম এলিমেন্টসে পাঠালে ডিফল্টভাবে সেগুলো সিরিয়ালাইজ করা হবে:
// Will be passed as `"1,2,3"` as the output of `[1,2,3].toString()`
<my-element value={[1,2,3]}></my-element>তবে, কোনো কাস্টম এলিমেন্টের ক্লাস কন্সট্রাকশন চলাকালে যদি কোনো প্রপার্টির নাম দৃশ্যমান থাকে, React সেটিকে প্রপার্টি হিসেবে চিনে নিয়ে সেখানে arbitrary মান পাঠাতে পারে:
import {MyElement} from './MyElement.js';
import { createRoot } from 'react-dom/client';
import {App} from "./App.js";
customElements.define('my-element', MyElement);
const root = createRoot(document.getElementById('root'))
root.render(<App />);export class MyElement extends HTMLElement {
constructor() {
super();
// The value here will be overwritten by React
// when initialized as an element
this.value = undefined;
}
connectedCallback() {
this.innerHTML = this.value.join(", ");
}
}export function App() {
return <my-element value={[1,2,3]}></my-element>
}কাস্টম এলিমেন্ট ব্যবহার করার সময় একটি সাধারণ প্যাটার্ন হলো—এগুলো কোন ইভেন্ট হলে কল করার জন্য ফাংশন নেয়ার বদলে CustomEvent dispatch করতে পারে। JSX-এর মাধ্যমে bind করার সময় ইভেন্ট নামের আগে on প্রিফিক্স দিয়ে এগুলোর ইভেন্ট শোনা যাবে।
import {MyElement} from './MyElement.js';
import { createRoot } from 'react-dom/client';
import {App} from "./App.js";
customElements.define('my-element', MyElement);
const root = createRoot(document.getElementById('root'))
root.render(<App />);export class MyElement extends HTMLElement {
constructor() {
super();
this.test = undefined;
this.emitEvent = this._emitEvent.bind(this);
}
_emitEvent() {
const event = new CustomEvent('speak', {
detail: {
message: 'Hello, world!',
},
});
this.dispatchEvent(event);
}
connectedCallback() {
this.el = document.createElement('button');
this.el.innerText = 'Say hi';
this.el.addEventListener('click', this.emitEvent);
this.appendChild(this.el);
}
disconnectedCallback() {
this.el.removeEventListener('click', this.emitEvent);
}
}export function App() {
return (
<my-element
onspeak={e => console.log(e.detail.message)}
></my-element>
)
}ইভেন্টগুলোর ক্ষেত্রে casing সংবেদনশীল এবং dashes (-) সাপোর্ট করে। custom element-এর ইভেন্ট শোনার সময় ইভেন্টের casing ঠিক রাখুন এবং সব dashes অন্তর্ভুক্ত করুন:
// Listens for `say-hi` events
<my-element onsay-hi={console.log}></my-element>
// Listens for `sayHi` events
<my-element onsayHi={console.log}></my-element>React ব্রাউজারে থাকা সকল বিল্ট-ইন SVG কম্পোনেন্ট সাপোর্ট করে। এর মধ্যে রয়েছেঃ
<a><animate><animateMotion><animateTransform><circle><clipPath><defs><desc><discard><ellipse><feBlend><feColorMatrix><feComponentTransfer><feComposite><feConvolveMatrix><feDiffuseLighting><feDisplacementMap><feDistantLight><feDropShadow><feFlood><feFuncA><feFuncB><feFuncG><feFuncR><feGaussianBlur><feImage><feMerge><feMergeNode><feMorphology><feOffset><fePointLight><feSpecularLighting><feSpotLight><feTile><feTurbulence><filter><foreignObject><g><hatch><hatchpath><image><line><linearGradient><marker><mask><metadata><mpath><path><pattern><polygon><polyline><radialGradient><rect><script><set><stop><style><svg><switch><symbol><text><textPath><title><tspan><use><view>
DOM স্ট্যান্ডার্ড এর মতোই React প্রপের নামের জন্য camelCase রীতি অনুসরণ করে। উদাহরণস্বরূপ, আপনি tabindex এর জায়গায় লিখবেন tabIndex। আপনি online converter ব্যবহার করে বিদ্যমান SVG কে JSX এ রূপান্তরিত করতে পারবেন।
Namespaced অ্যাট্রিবিউটগুলো কোলন ছাড়া লিখতে হবেঃ
xlink:actuatebecomesxlinkActuate.xlink:arcrolebecomesxlinkArcrole.xlink:hrefbecomesxlinkHref.xlink:rolebecomesxlinkRole.xlink:showbecomesxlinkShow.xlink:titlebecomesxlinkTitle.xlink:typebecomesxlinkType.xml:basebecomesxmlBase.xml:langbecomesxmlLang.xml:spacebecomesxmlSpace.xmlns:xlinkbecomesxmlnsXlink.