function Welcome() {
return <h1>React.js Bangla Tutorial এ আপনাকে স্বাগতম!</h1>;
}
এই টিউটোরিয়ালটি React এর অফিসিয়াল ডকুমেন্টেশন ফলো করে তৈরি করা হয়েছে, যা আপনাকে React.js গভীরভাবে শিখতে সাহায্য করবে।
রিয়্যাক্ট কি?
React হলো একটি লাইব্রেরি, যার মাধ্যমে তুমি ওয়েব এবং মোবাইল অ্যাপের ইউজার ইন্টারফেস তৈরি করতে পারো। এক কথায়, React এমন একটি টুল যা দিয়ে তুমি ভিজ্যুয়াল ইউজার ইন্টারফেস—মানে যেটা ইউজার দেখে এবং ব্যবহার করে— তা তৈরি করতে পারো খুব সহজভাবে।
রিয়্যাক্ট এর গুরুত্বপূর্ণ বিষয়:
🔹 ছোট ছোট টুকরো জুড়ে দিয়ে ইন্টারফেস বানাই
React-এ ইন্টারফেস তৈরি করার পদ্ধতিটা একটু আলাদা। তুমি পুরো ইন্টারফেস একবারেই বানিয়ে ফেলো না—বরং ছোট ছোট অংশে ভেঙে ফেলো। এই প্রতিটা অংশকে বলে "কম্পোনেন্ট (Component)।
ধরো, তুমি একটা ভিডিও প্ল্যাটফর্ম বানাচ্ছো। সেখানে থাকতে পারে তিনটা কম্পোনেন্ট:
<Thumbnail />
→ ভিডিওর থাম্বনেইল দেখায়<LikeButton />
→ লাইক বাটন<Video />
→ পুরো ভিডিও প্লেয়ার
// video.js
function Video({ video }) {
return (
<div>
<Thumbnail video={video} />
<a href={video.url}>
<h3>{video.title}</h3>
<p>{video.description}</p>
</a>
<LikeButton video={video} />
</div>
);
}
এইভাবে ছোট ছোট কম্পোনেন্ট বানিয়ে, পরে এগুলো জুড়ে তুমি একটি পূর্ণাঙ্গ অ্যাপ তৈরি করতে পারো—যেমন একটি প্রোডাক্ট ল্যান্ডিং পেজ, একটি ইউজার প্রোফাইল ড্যাশবোর্ড, এমনকি একটি সম্পূর্ণ অ্যাপ্লিকেশন।
React-এ একা একা কাজ করার অভিজ্ঞতা, আবার হাজারো ডেভেলপার মিলে কাজ করার অভিজ্ঞতাটা একইরকম। কারণ প্রতিটা কম্পোনেন্টই ইউনিক, আলাদা আলাদা কাজ করে এবং একে অপরের থেকে স্বাধীনভাবে পরিচালিত হয়।
🔹 JSX: কোড আর মার্কআপ একসাথে লিখো
React কম্পোনেন্ট আসলে জাভাস্ক্রিপ্ট ফাংশন। তুমি চাইলে এর ভেতরে শর্ত (if condition) ব্যবহার করতে পারো, চাইলে লিস্ট দেখানোর জন্য map()
ব্যবহার করতে পারো।
React-এ তুমি যেটা লিখো সেটাকে বলে JSX। এটা হলো জাভাস্ক্রিপ্ট-এর একটি এক্সটেনশন, যা দেখতে HTML-এর মতো, কিন্তু এর ভেতরে জাভাস্ক্রিপ্টের পাওয়ার থাকে। JSX এ মার্কআপ ও লজিক একসাথে থাকে—যেটা কোড বুঝতে এবং মেইনটেইন করতে অনেক সহজ করে দেয়।
উদাহরণ:
//videolist.js
unction VideoList({ videos, emptyHeading }) {
const count = videos.length;
let heading = emptyHeading;
if (count > 0) {
const noun = count > 1 ? 'Videos' : 'Video';
heading = count + ' ' + noun;
}
return (
<section>
<h1>{heading}</h1>
{videos.map(video =>
<Video key={video.id} video={video} />
)}
</section>
);
}
শুরুতে
<Welcome/>
কম্পোনেন্টটিতে<h1>
ট্যাগটা HTML, নাকি JSX, এটা কি Browser-এর real h1? এই ট্যাগটা প্রথমে JSX। JSX মানে হলো JavaScript XML — এটা JavaScript-এর মধ্যে HTML-এর মতো syntax লেখার একটা উপায়। JSX কোডটা এইরকম JavaScript কোডে রূপান্তর হয়:
React.createElement("h1", null, "স্বাগতম আমার ওয়েবসাইটে!");
🔹 যেখানেই দরকার, সেখানেই ইন্টারঅ্যাকশন যোগ করো
React কম্পোনেন্ট শুধু স্ট্যাটিক data দেখায় না। এটা ইউজারের ইন্টারঅ্যাকশন অনুযায়ী স্ক্রিন আপডেট করে। ধরো, কেউ ইনপুটে কিছু টাইপ করছে, তখন React সেটার ভিত্তিতে স্ক্রিনে কী দেখাতে হবে, সেটা আপডেট করে।
এই কারণে একবারে পুরো ওয়েবসাইট না বানিয়ে, তুমি শুধুমাত্র কম্পোনেন্টের নির্দিষ্ট জায়গায় React ব্যবহার করে ইন্টারঅ্যাকটিভ ফিচার যোগ করতে পারো।
// এই কোডটি এখন বোঝার দরকার নেই। শুধু একটু দেখে রাখো।
import React, { useState } from "react";
const videos = [
{
id: "vids-0",
title: "React: The Documentary",
description: "The origin story of React",
image: "/images/home/videos/documentary.webp",
url: "https://www.youtube.com/watch?v=8pDqJVdNa44",
},
{
id: "vids-1",
title: "Rethinking Best Practices",
description: "Pete Hunt (2013)",
image: "/images/home/videos/rethinking.jpg",
url: "https://www.youtube.com/watch?v=x7cQ3mrcKaY",
},
{
id: "vids-2",
title: "Introducing React Native",
description: "Tom Occhino (2015)",
image: "/images/home/videos/rn.jpg",
url: "https://www.youtube.com/watch?v=KVZ-P-ZI6W4",
},
{
id: "vids-3",
title: "Introducing React Hooks",
description: "Sophie Alpert and Dan Abramov (2018)",
image: "/images/home/videos/hooks.jpg",
url: "https://www.youtube.com/watch?v=V-QO-KO90iQ",
},
{
id: "vids-4",
title: "Introducing Server Components",
description: "Dan Abramov and Lauren Tan (2020)",
image: "/images/home/videos/rsc.jpg",
url: "https://www.youtube.com/watch?v=TQQPAU21ZUw",
},
];
function SearchInput({ value, onChange }) {
return (
<input
type="text"
placeholder="Search videos..."
value={value}
onChange={(e) => onChange(e.target.value)}
style={{ padding: "8px", width: "100%", marginBottom: "16px" }}
/>
);
}
function VideoList({ videos, emptyHeading }) {
if (videos.length === 0) {
return <h3>{emptyHeading}</h3>;
}
return (
<ul>
{videos.map((video) => (
<li key={video.id} style={{ marginBottom: "16px" }}>
<a href={video.url} target="_blank" rel="noopener noreferrer">
<img src={video.image} alt={video.title} width="200" />
<h4>{video.title}</h4>
<p>{video.description}</p>
</a>
</li>
))}
</ul>
);
}
function filterVideos(videos, searchText) {
return videos.filter((video) =>
video.title.toLowerCase().includes(searchText.toLowerCase())
);
}
function SearchableVideoList({ videos }) {
const [searchText, setSearchText] = useState("");
const foundVideos = filterVideos(videos, searchText);
return (
<>
<SearchInput value={searchText} onChange={setSearchText} />
<VideoList
videos={foundVideos}
emptyHeading={`No matches for “${searchText}”`}
/>
</>
);
}
export default function App() {
return (
<div style={{ padding: "24px" }}>
<h1>React Videos</h1>
<p>A brief history of React</p>
<SearchableVideoList videos={videos} />
</div>
);
}
🔹 চাইলে ফুলস্ট্যাক ফ্রেমওয়ার্ক ব্যবহার করো
React শুধু UI "অথবা" component তৈরি করতে সাহায্য করে। কিন্তু অ্যাপ বানাতে আরও দরকার হয় রাউটিং, ডেটা ফেচিং ইত্যাদি।
এই জন্যই Next.js বা Remix এর মতো ফুলস্ট্যাক React ফ্রেমওয়ার্কগুলো ব্যবহারের পরামর্শ দেয়া হয়। এরা React-এর উপর ভিত্তি করে তৈরি এবং তোমাকে একটি পূর্ণ অ্যাপ বানাতে সাহায্য করে। এই ধরনের ফ্রেমওয়ার্ক তোমাকে এমন কম্পোনেন্ট বানাতে দেয়, যা সার্ভারে চলে বা বিল্ড ইন টাইমে ডেটা নিয়ে আসে—ফলে ইউজারের কাছে খুব দ্রুত রেসপন্স পাওয়া যায়।
// আমি নিজেই বুঝি নাই,শুধু দেখে রেখে সামনে আগাও
import { useState, useEffect, createContext, useContext } from "react";
// Dummy data simulating database
const confs = {
"react-conf-2019": {
id: 1,
name: "React Conf 2019",
cover: "/reactConf2019Cover.jpg",
},
"react-conf-2021": {
id: 2,
name: "React Conf 2021",
cover: "/reactConf2021Cover.jpg",
},
};
const talks = {
1: [
{ id: 101, video: "video1.mp4" },
{ id: 102, video: "video2.mp4" },
],
2: [
{ id: 201, video: "video3.mp4" },
{ id: 202, video: "video4.mp4" },
],
};
// Context for navigation
const NavContext = createContext();
function useConference(slug) {
const [conf, setConf] = useState(null);
useEffect(() => {
// Simulate fetching conference data
setConf(confs[slug] || null);
}, [slug]);
return conf;
}
function useTalks(confId) {
const [videos, setVideos] = useState([]);
useEffect(() => {
if (confId) {
// Simulate fetching talks data
const talkList = talks[confId] || [];
setVideos(talkList.map((t) => t.video));
}
}, [confId]);
return videos;
}
function ConferenceLayout({ conf, children }) {
if (!conf) return <p>Loading conference...</p>;
return (
<div>
<h1>{conf.name}</h1>
<img src={conf.cover} alt={conf.name} style={{ width: "200px" }} />
<div>{children}</div>
</div>
);
}
function SearchableVideoList({ videos }) {
return (
<ul>
{videos.map((v, i) => (
<li key={i}>{v}</li>
))}
</ul>
);
}
function ConferencePage({ slug }) {
const conf = useConference(slug);
const videos = useTalks(conf?.id);
if (!conf) return <p>Loading conference page...</p>;
return (
<ConferenceLayout conf={conf}>
<SearchableVideoList videos={videos} />
</ConferenceLayout>
);
}
export default function Example() {
const [slug, setSlug] = useState("react-conf-2021");
function navigate(newSlug) {
setSlug(newSlug);
}
return (
<NavContext.Provider value={{ slug, navigate }}>
<div style={{ display: "flex", gap: "20px" }}>
<div style={{ flex: 1 }}>
<button onClick={() => navigate("react-conf-2019")}>
React Conf 2019
</button>
<button onClick={() => navigate("react-conf-2021")}>
React Conf 2021
</button>
</div>
<div style={{ flex: 3 }}>
<ConferencePage slug={slug} />
</div>
</div>
</NavContext.Provider>
);
}
🔹 ওয়েব আর নেটিভ—দুই প্লাটফর্মেই কাজ করে
React দিয়ে তুমি শুধু ওয়েব না, মোবাইল অ্যাপও বানাতে পারো। React Native ও Expo-এর মাধ্যমে Android, iOS-এর জন্য অ্যাপ বানানো যায়, যেগুলোর ইউআই সত্যিকারের নেটিভ প্ল্যাটফর্ম ব্যবহার করে।
মানে, তুমি একটি ইউনিভার্সাল স্কিল শিখে—React—দুই ধরনের অ্যাপ বানাতে পারো: ওয়েব এবং মোবাইল।
🔹 ভবিষ্যতের জন্য প্রস্তুত থাকা
React-এর আপডেট আসলেও তা খুব সাবধানে আনা হয়। প্রতিটি নতুন ফিচার বা পরিবর্তন Meta-এর বিলিয়ন ইউজারভিত্তিক অ্যাপগুলোর মাধ্যমে পরীক্ষা করা হয়। তাই React শেখা মানে ভবিষ্যতের জন্য প্রস্তুত থাকা।
React টিম সবসময় নতুন কিছু নিয়ে গবেষণা করে, তবে কেবলমাত্র প্রমাণিত এবং ব্যবহারযোগ্য ফিচারগুলোকেই React-এ যোগ করে।
চমৎকার, Mojnu vai! তুমি যে কোড এবং ডিজাইন অংশ দিলা, সেটা থেকে আমরা বুঝতে পারছি এই অংশটা React ডকুমেন্টেশনের একদম শুরুতে "কমিউনিটির শক্তি", "সহজে শেখা", এবং "উৎসাহ" দেয়ার উদ্দেশ্যে লেখা হয়েছে।
এখন আমরা "২য় ভাগ - শুরুর আগে" নামে একটা নতুন অধ্যায় শুরু করবো যেখানে প্রাঞ্জল ও সহজ ভাষায় React শেখার উদ্দেশ্য, প্রস্তুতি এবং কমিউনিটির গুরুত্ব নিয়ে কথা বলব।
🔹 তুমি একা নও
React শিখতে চাও? ভয় পাওয়ার কিছু নেই। তুমি একা নও। প্রতি মাসে প্রায় ২০ লাখের বেশি ডেভেলপার React ডকুমেন্টেশন পড়ে শেখে। তোমার মতোই নতুন, আগ্রহী মানুষ যারা চায় সুন্দর ইউজার ইন্টারফেস বানাতে।
React এমন কিছু, যেটা অনেক মানুষ ও টিম একসাথে ব্যবহার করে। কেউ শুরু করছে, কেউ আগেই অনেকদূর এগিয়ে গেছে – কিন্তু সবাই এক প্ল্যাটফর্মে শেখে, ভাগাভাগি করে, এবং একে অপরকে সাহায্য করে।
🔹 কমিউনিটি মানেই পরিবার
React শুধুমাত্র একটা লাইব্রেরি না। এটা একটা বড় কমিউনিটি। এখানে তুমি চাইলে সাহায্য চাইতে পারো, নতুন সুযোগ খুঁজে পেতে পারো, এমনকি নতুন বন্ধু পর্যন্ত পেতে পারো।
এই কমিউনিটিতে থাকবে –
- নতুন ডেভেলপার,
- অভিজ্ঞ প্রোগ্রামার,
- ডিজাইনার,
- শিক্ষক-শিক্ষার্থী,
- গবেষক আর আর্টিস্টরাও।
সবাই ভিন্ন, কিন্তু সবার লক্ষ্য এক—React দিয়ে সুন্দর ভিজুয়াল UI তৈরি করা।
🔹 আমরা সবাই মিলে শিখি
React শেখার যাত্রাটা অনেকটা গ্রুপ স্টাডির মতো। তুমি যে সমস্যায় পড়বে, হয়তো আগেই কেউ সেটা সমাধান করেছে। তোমার অভিজ্ঞতা হয়তো অন্য কাউকে সাহায্য করবে। এজন্যই React কমিউনিটি এত শক্তিশালী।
🔹 তুমি চাইলে পুরনো ওয়েবসাইটে React যুক্ত করে কাজ করতে পারো
তুমি যদি একটা আগের তৈরি ওয়েবসাইটে (যেটা React ছাড়া অন্য কিছু দিয়ে তৈরি) React যুক্ত করতে চাও, তাহলে পুরো সাইটটা নতুন করে বানাতে হবে না। শুধু যে অংশে ইন্টারঅ্যাকটিভ ফিচার দরকার, সেই জায়গায় React ব্যবহার করলেই হবে।
ধাপ ১: Node.js ইনস্টল করো
React নিয়ে কাজ করতে হলে তোমার কম্পিউটারে Node.js থাকতে হবে। এটা ইনস্টল করে নাও https://nodejs.org (opens in a new tab) থেকে।
ধাপ ২: React ও React DOM ইনস্টল করো
npm install react react-dom
ধাপ ৩: একটা প্রধান JavaScript ফাইল তৈরি করো (যেমন: index.js
) এবং এতে নিচের কোড লিখো:
import { createRoot } from "react-dom/client";
function NavigationBar() {
return <h1>Hello from React!</h1>;
}
const domNode = document.getElementById("navigation");
// এরপর HTML এর একটা জায়গাকে React এর "মঞ্চ" বানানো যেখানে React তার নাটক (UI) দেখাবে
const root = createRoot(domNode);
root.render(<NavigationBar />);
ধাপ ৪: তোমার HTML ফাইলে একটা DOM এলিমেন্ট যোগ করো যেখানে React কম্পোনেন্ট বসবে
<!-- index.html -->
<nav id="navigation"></nav>
এখন React সেই <nav>
এর ভিতরে “Hello from React!” দেখাবে।
- React দিয়ে পুরো পেজ ক্লিয়ার করে
<div id="app">
বসিয়ে দেওয়া যায়, তবে পুরোনো কনটেন্ট মুছে ফেললে সমস্যা হতে পারে। তাই, HTML-এ নির্দিষ্ট জায়গায় React বসানোই ভালো। - ছোট ছোট React কম্পোনেন্ট (যেমন: একটা বাটন বা সার্চ ফিল্ড) দিয়ে শুরু করো, পরে আস্তে আস্তে আরও বড় অংশে React ব্যবহার করা যাবে।
React-এর আরোও কিছু গুরুত্বপূর্ণ বিষয় যা জানা থাকা জুরুরি
🔹 Component Based Architecture
পুরো অ্যাপকে ছোট ছোট, Reusable Part এ ভাগ করা, যা সহজে ম্যানেজ করা সম্ভব।
🔹 Virtual DOM
সরাসরি ব্রাউজারের DOM পরিবর্তনের বদলে একটি ভার্চুয়াল কপি নিয়ে কাজ করে, ফলে দ্রুত ও কার্যকর আপডেট হয়। ভিজুয়াল UI এর যে অংশটুকু পরিবর্তন হয়, ঠিক সেই টুকুন ধরে পরিবর্তন করে ফেলে।
🔹 ডিক্লারেটিভ UI
UI কেমন দেখতে হবে, তা সহজে ডিফাইন করে দেয়া যায়। এটা দেখাও, এটা দেখাও না এইভাবে।
🔹 স্টেট (State)
স্টেট হলো একটি কম্পোনেন্টের নিজস্ব ডেটা যা সময়ের সাথে পরিবর্তিত হয়। যখন স্টেট পরিবর্তন হয়, তখন React UI আবার নতুন করে রেন্ডার করে যাতে ব্যবহারকারী এই পরিবর্তন দেখতে পায়। সহজ ভাষায়, স্টেট হচ্ছে ডাইনামিক ডেটা যা ইউজারের কাজের উপর নির্ভর করে।
🔹 প্রপস (Props)
প্রপস হলো প্যারেন্ট কম্পোনেন্ট থেকে চাইল্ড কম্পোনেন্টে তথ্য বা ফাংশন পাঠানোর একটি উপায়। প্রপস পরিবর্তন করা যায় না (readonly), তাই ডেটার প্রবাহ একদিকীয় হয় — প্যারেন্ট থেকে চাইল্ডে।
🔹 লাইফসাইকেল মেথডস (Lifecycle Methods)
React এর ক্লাস কম্পোনেন্টে বিভিন্ন সময় বা পর্যায়ে (যেমন: মাউন্টিং, আপডেটিং, আনমাউন্টিং) কী কাজ হবে তা নিয়ন্ত্রণ করার জন্য ফাংশনগুলো।
componentDidMount
: কম্পোনেন্ট তৈরি হয়ে UI-তে যুক্ত হওয়ার পর একবার কল হয়।componentDidUpdate
: স্টেট বা প্রপস পরিবর্তনের পরে কল হয়।componentWillUnmount
: কম্পোনেন্ট UI থেকে সরানোর আগে কল হয়।
🔹 হুকস (Hooks)
React ১৬.৮ থেকে এসেছে হুকস, যা ফাংশনাল কম্পোনেন্টে স্টেট ও অন্যান্য React ফিচার ব্যবহার করতে দেয়।
useState
: স্টেট ডিক্লেয়ার এবং UI আপডেট করার জন্য।useEffect
: API কল, সাবস্ক্রিপশন, DOM আপডেট ইত্যাদি সাইড এফেক্ট পরিচালনা করার জন্য।useContext
,useReducer
: আরও জটিল স্টেট ম্যানেজমেন্টের জন্য।
React মূলত ওয়েব অ্যাপের জন্য তৈরি হলেও, এটি মোবাইল (React Native) এবং ডেস্কটপ অ্যাপ ডেভেলপমেন্টেও ব্যবহৃত হয়।
React-এ কাজ হয় ছোট ছোট কম্পোনেন্ট দিয়ে, যা নিজস্ব ডেটা ও লজিক নিয়ে ভিজ্যুয়াল ইউজার ইন্টারফেস গঠন করে। ফলে পুরো অ্যাপকে ছোট ছোট ইউনিটে ভাগ করে, খুব সহজে নিয়ন্ত্রণ করা যায়।
কম্পোনেন্টগুলো দেখতে একই রকম, কিন্তু ডেটা আলাদা।
React.js-এর ইতিহাস
২০১১ সালে ফেসবুকের Jordan Walke React তৈরি করেন। তিনি PHP-এর Component-Based Framework "XHP" থেকে অনুপ্রাণিত হয়ে এটি ডেভেলপ করেন। React প্রথম ফেসবুকের নিউজফিডে এবং পরে ২০১২ সালে ইনস্টাগ্রামে ব্যবহার করা হয়।
২০১৩ সালে ফেসবুক React.js-কে ওপেন সোর্স ঘোষণা করে। এরপর থেকে React দ্রুত জনপ্রিয়তা পায় এবং বিভিন্ন বড় কোম্পানি ও ডেভেলপারদের মধ্যে ছড়িয়ে পড়ে।
React-এর নতুন এই চিন্তাধারা যেমন Virtual DOM, Declarative UI, Component-Based Architecture ওয়েব ডেভেলপমেন্টকে আরও সহজ, দ্রুত এবং স্কেলযোগ্য করেছে।
React কেন?
🔹 রিয়েল লাইফ অ্যাপ্লিকেশনে JavaScript বনাম React: কোনটি, কখন এবং কেন?
ওয়েব ডেভেলপমেন্টের দুনিয়ায় প্রায়শই একটি প্রশ্ন ওঠে: আমাদের কি প্রজেক্টের জন্য ভ্যানিলা জাভাস্ক্রিপ্ট (Vanilla JavaScript) ব্যবহার করা উচিত, নাকি React-এর মতো কোনো লাইব্রেরি/ফ্রেমওয়ার্ক বেছে নেওয়া উচিত? দুটো পদ্ধতিরই নিজস্ব সুবিধা এবং চ্যালেঞ্জ রয়েছে। এই ব্লগ পোস্টে আমরা রিয়েল লাইফ অ্যাপ্লিকেশনের প্রেক্ষাপটে এই দুটি বিষয় নিয়ে আলোচনা করব, যাতে আপনি আপনার পরবর্তী প্রজেক্টের জন্য সঠিক সিদ্ধান্ত নিতে পারেন।
🔹 ভ্যানিলা JavaScript: যখন সরলতাই শক্তি 💪
ভ্যানিলা JS বলতে বোঝায় কোনো অতিরিক্ত লাইব্রেরি বা ফ্রেমওয়ার্ক ছাড়াই সরাসরি ব্রাউজারে চলতে সক্ষম স্ট্যান্ডার্ড জাভাস্ক্রিপ্ট।
সুবিধা:
- কোনো অ্যাবস্ট্রাকশন নেই, সম্পূর্ণ নিয়ন্ত্রণ: ভ্যানিলা JS ব্যবহার করলে আপনি সরাসরি ব্রাউজারের DOM (Document Object Model) নিয়ে কাজ করেন। এর ফলে কোডের উপর আপনার সম্পূর্ণ নিয়ন্ত্রণ থাকে এবং কোনো অতিরিক্ত লেয়ার বা অ্যাবস্ট্রাকশন থাকে না।
- হালকা (Lightweight): কোনো অতিরিক্ত লাইব্রেরি লোড না হওয়ায় পেজের প্রাথমিক লোড টাইম কম হতে পারে, যা ছোট প্রজেক্ট বা পারফরম্যান্স-ক্রিটিক্যাল মাইক্রো-ইন্টার্যাকশনের জন্য খুবই গুরুত্বপূর্ণ।
- শেখার জন্য অপরিহার্য: ওয়েব ডেভেলপমেন্টের ভিত্তি হলো HTML, CSS এবং JavaScript। ভ্যানিলা JS ভালোভাবে বুঝলে যেকোনো ফ্রেমওয়ার্ক বা লাইব্রেরি শেখা এবং বোঝা সহজ হয়।
- সর্বজনীন সামঞ্জস্যতা (Universal Compatibility): প্রায় সব ব্রাউজারেই ভ্যানিলা JS সাপোর্ট করে। সঠিকভাবে লিখলে ব্রাউজার কম্প্যাটিবিলিটি নিয়ে চিন্তা কম করতে হয়।
অসুবিধা ও চ্যালেঞ্জ:
- জটিল DOM ম্যানিপুলেশন: বড় অ্যাপ্লিকেশনে সরাসরি DOM ম্যানিপুলেট করা বেশ জটিল এবং ত্রুটিপূর্ণ (error-prone) হতে পারে। যেমন, একটি ছোট পরিবর্তনে পুরো UI রি-রেন্ডার করার প্রয়োজন না থাকলেও, ভুল কোডিংয়ের কারণে ব্রাউজারকে অতিরিক্ত কাজ (Reflow/Repaint) করতে হতে পারে, যা পারফরম্যান্সে প্রভাব ফেলে।
- স্টেট ম্যানেজমেন্টের চ্যালেঞ্জ: অ্যাপ্লিকেশনের ডেটা (স্টেট) ম্যানেজ করা, বিশেষ করে যখন একাধিক কম্পোনেন্ট একই ডেটা শেয়ার করে, তখন বেশ কঠিন হয়ে পড়ে। কোড অগোছালো এবং রক্ষণাবেক্ষণে কষ্টকর হতে পারে।
- কোড অর্গানাইজেশন এবং মডুলারিটি: প্রজেক্ট বড় হওয়ার সাথে সাথে কোড সুসংগঠিত রাখা এবং মডুলার করা কঠিন হয়ে পড়ে। এর জন্য ভালো ডিজাইন প্যাটার্ন (যেমন MVC) এবং ডিসিপ্লিন প্রয়োজন।
- কম্পোনেন্ট পুনঃব্যবহারযোগ্যতা (Reusability): UI কম্পোনেন্ট তৈরি এবং সেগুলো বিভিন্ন জায়গায় পুনঃব্যবহার করা বেশ কষ্টসাধ্য ও সময়সাপেক্ষ।
- ডেভেলপার অভিজ্ঞতা (Developer Experience): জটিল UI তৈরির ক্ষেত্রে React-এর মতো ডিক্লারেটিভ পদ্ধতির তুলনায় ভ্যানিলা JS-এ কাজ করা কম প্রোডাক্টিভ মনে হতে পারে এবং বেশি কোড লিখতে হয়।
React একটি জনপ্রিয় জাভাস্ক্রিপ্ট লাইব্রেরি যা ইউজার ইন্টারফেস (UI) তৈরির জন্য ব্যবহৃত হয়। এটি কম্পোনেন্ট-ভিত্তিক আর্কিটেকচার এবং ভার্চুয়াল DOM-এর জন্য পরিচিত।
সুবিধা:
- কম্পোনেন্ট-ভিত্তিক আর্কিটেকচার: React-এ UI-কে ছোট ছোট স্বাধীন কম্পোনেন্টে ভাগ করে তৈরি করা হয়। এই কম্পোনেন্টগুলো পুনঃব্যবহারযোগ্য, টেস্টিং-এর জন্য সহজ এবং কোডকে মডুলার ও রক্ষণাবেক্ষণযোগ্য করে তোলে।
- ডিক্লারেটিভ UI: আপনি শুধু বর্ণনা করেন যে একটি নির্দিষ্ট স্টেটে আপনার UI কেমন দেখতে হবে। React নিজেই সেই অনুযায়ী DOM আপডেট করার কাজটি করে। এটি কোডকে আরও বোধগম্য এবং 예측যোগ্য করে তোলে।
- ভার্চুয়াল DOM এবং দক্ষ আপডেট: React প্রথমে ভার্চুয়াল DOM-এ পরিবর্তনগুলো প্রয়োগ করে এবং তারপর ডিফিউইং অ্যালগরিদমের মাধ্যমে ন্যূনতম পরিবর্তনগুলো রিয়েল DOM-এ প্রয়োগ করে। এতে অপ্রয়োজনীয় DOM ম্যানিপুলেশন কমে এবং পারফরম্যান্স ভালো হয় (যদিও ১০০% সবক্ষেত্রে সেরা নাও হতে পারে, তবে বেশিরভাগ ক্ষেত্রেই এটি বেশ কার্যকর)।
- শক্তিশালী ইকোসিস্টেম: React-এর একটি বিশাল কমিউনিটি এবং অসংখ্য থার্ড-পার্টি লাইব্রেরি ও টুলস (যেমন: Redux, React Router, Next.js) রয়েছে, যা ডেভেলপমেন্ট প্রক্রিয়াকে আরও সহজ ও দ্রুত করে।
- সহজ স্টেট ম্যানেজমেন্ট: ছোট অ্যাপ্লিকেশনের জন্য নিজস্ব
useState
এবংuseContext
হুক এবং বড় অ্যাপ্লিকেশনের জন্য Redux, Zustand বা MobX-এর মতো শক্তিশালী স্টেট ম্যানেজমেন্ট সলিউশন রয়েছে।
সমস্যা ও চ্যালেঞ্জ:
- শেখার প্রাথমিক ধাপ (Learning Curve): React শিখতে হলে JSX (JavaScript XML), কম্পোনেন্ট লাইফসাইকেল (বা হুকস যেমন
useEffect
,useState
), স্টেট ম্যানেজমেন্টের ধারণা এবং প্রায়শই বিল্ড টুলস (যেমন Webpack, Babel) সম্পর্কে জানতে হয়, যা নতুনদের জন্য কিছুটা কঠিন মনে হতে পারে। - বান্ডেল সাইজ: React এবং অন্যান্য প্রয়োজনীয় লাইব্রেরি মিলে প্রাথমিক বান্ডেল সাইজ ভ্যানিলা JS-এর তুলনায় বেশি হতে পারে। যদিও কোড স্প্লিটিং এবং অন্যান্য অপটিমাইজেশন টেকনিক ব্যবহার করে এটি কমানো যায়।
- অ্যাবস্ট্রাকশনের জটিলতা: React অনেক কাজ পর্দার আড়ালে করে (অ্যাবস্ট্রাকশন)। এটি ডেভেলপমেন্ট সহজ করলেও, মাঝে মাঝে ডিবাগিং বা ব্রাউজারের মূল আচরণ বোঝা কঠিন হতে পারে, বিশেষ করে যদি React-এর অভ্যন্তরীণ কার্যকারিতা সম্পর্কে স্পষ্ট ধারণা না থাকে।
- অতিরিক্ত ইঞ্জিনিয়ারিং (Over-engineering): খুব ছোট বা সাধারণ ওয়েবসাইটের জন্য React ব্যবহার করাটা "over-engineering" বা প্রয়োজনের চেয়ে বেশি জটিলতা নিয়ে আসতে পারে। সেক্ষেত্রে ভ্যানিলা JS হয়তো ভালো এবং দ্রুত সমাধান দিতে পারত।
- বিল্ড টুলের উপর নির্ভরশীলতা: বেশিরভাগ React প্রজেক্টের জন্য একটি বিল্ড সিস্টেম (যেমন Create React App, Vite, Next.js বা কাস্টম Webpack/Babel সেটআপ) প্রয়োজন হয়, যা কনফিগারেশন এবং ব্যবস্থাপনার ক্ষেত্রে অতিরিক্ত জটিলতা তৈরি করতে পারে।
- পারফরম্যান্সের ভুল ধারণা: যদিও React ভার্চুয়াল DOM-এর মাধ্যমে পারফরম্যান্স অপটিমাইজ করে, তবুও ভুলভাবে কোড লিখলে (যেমন, অপ্রয়োজনীয় রি-রেন্ডার, বড় কম্পোনেন্ট ট্রি সঠিকভাবে মেমোইজ না করা) পারফরম্যান্স সমস্যা হতে পারে। React কীভাবে রেন্ডার করে এবং কখন কম্পোনেন্ট রি-রেন্ডার হয়, সে সম্পর্কে ভালো ধারণা থাকা জরুরি।
🔹 কখন কোনটি ব্যবহার করবেন?
-
ভ্যানিলা JavaScript ব্যবহার করুন যখন:
- আপনার প্রজেক্টটি খুব ছোট এবং নির্দিষ্ট, যেমন একটি স্ট্যাটিক সাইটে কিছু ডাইনামিক ফিচার যোগ করা বা একটি ছোট ওয়েব টুল তৈরি করা।
- পারফরম্যান্স অত্যন্ত গুরুত্বপূর্ণ এবং আপনি প্রতিটি বাইট ও মিলিসেকেন্ড নিয়ন্ত্রণ করতে চান (যেমন, গেমিং বা অ্যানিমেশন)।
- আপনি নির্ভরতা (dependencies) ন্যূনতম রাখতে চান।
- আপনি ওয়েবের মৌলিক বিষয়গুলো ভালোভাবে শিখতে বা অনুশীলন করতে চান।
-
React ব্যবহার করুন যখন:
- আপনি একটি জটিল সিঙ্গেল পেজ অ্যাপ্লিকেশন (SPA) তৈরি করছেন।
- আপনার UI-তে অনেক ডাইনামিক কন্টেন্ট এবং ইন্টার্যাক্টিভিটি রয়েছে।
- পুনঃব্যবহারযোগ্য কম্পোনেন্ট এবং সহজ রক্ষণাবেক্ষণ আপনার জন্য গুরুত্বপূর্ণ।
- একটি বড় টিম একসাথে কাজ করছে এবং কোডের সামঞ্জস্যতা বজায় রাখা দরকার।
- আপনার শক্তিশালী স্টেট ম্যানেজমেন্ট প্রয়োজন।
শেষ কথা
ভ্যানিলা JS এবং React দুটোই শক্তিশালী টুলস। কোনটি "সেরা" তা নির্ভর করে আপনার প্রজেক্টের প্রয়োজনীয়তা, টিমের অভিজ্ঞতা এবং দীর্ঘমেয়াদী লক্ষ্যের উপর। প্রায়শই, সেরা সমাধানটি হতে পারে দুটোর মিশ্রণ – যেখানে প্রয়োজন সেখানে React-এর সুবিধা নেওয়া এবং ছোট, নির্দিষ্ট কাজের জন্য ভ্যানিলা JS ব্যবহার করা। মূল বিষয় হলো, আপনার টুলের সীমাবদ্ধতা এবং সুবিধাগুলো জেনে বুঝে সিদ্ধান্ত নেওয়া।
React শেখার জন্য রিসোর্স
- অফিসিয়াল ডকুমেন্টেশন: https://react.dev/ (opens in a new tab)
- বাংলা ভিডিও সিরিজ: React Bangla Tutorial (opens in a new tab)