නූතන වෙබ් ලෝකයේ පෙරළියක් කළ, අන්තර්ක්රියාකාරී පරිශීලක අතුරුමුහුණත් (Interactive User Interfaces) ගොඩනැගීම සඳහා වූ JavaScript පුස්තකාලය පිළිබඳ ඔබගේ පළමු පාඩම.
අපි මීට පෙර පාඩම් වලින් PHP, Laravel, Django වැනි server-side තාක්ෂණයන් ගැන ඉගෙන ගත්තෙමු. ඒවා වෙබ් යෙදුමක "මොළය" සහ "කොඳු නාරටිය" ලෙස ක්රියා කරයි. නමුත්, පරිශීලකයා සෘජුවම දකින සහ ගනුදෙනු කරන, වෙබ් අඩවියේ "මුහුණ" (front-end) නිර්මාණය කරන්නේ කෙසේද? Facebook, Instagram, Netflix වැනි යෙදුම් වල ඇති වේගවත්, සුමට, සහ අන්තර්ක්රියාකාරී අත්දැකීම ලබා දෙන්නේ කෙසේද?
පිළිතුර **React** ය. React යනු Facebook (Meta) සමාගම විසින් නිර්මාණය කර, නඩත්තු කරන, පරිශීලක අතුරුමුහුණත් (User Interfaces - UI) ගොඩනැගීම සඳහා වූ JavaScript **පුස්තකාලයකි (Library)**. එය සම්පූර්ණ framework එකක් නොව, UI එක ගොඩනැගීමේ කාර්යය සඳහාම විශේෂිත වූ මෙවලමකි.
මෙම නිබන්ධනයෙන්, අපි React හි මෙම මූලික සංකල්ප ඉගෙන ගනිමින්, සම්භාව්ය **"කළ යුතු දේ ලැයිස්තුවක්" (To-Do App)** මුල සිටම නිර්මාණය කරමු.
පූර්ව අවශ්යතා: මෙම පාඩම සඳහා HTML, CSS, සහ නූතන JavaScript (ES6+), විශේෂයෙන් functions, arrays (`.map`, `.filter`), සහ objects පිළිබඳව හොඳ අවබෝධයක් තිබීම ඉතා වැදගත් වේ.
React යෙදුමක් නිර්මාණය කිරීමට, අපගේ පරිගණකයේ Node.js සහ npm ස්ථාපනය කර තිබිය යුතුය.
Node.js යනු JavaScript, වෙබ් බ්රව්සරයෙන් පිටත (ඔබගේ පරිගණකයේ) ක්රියාත්මක කිරීමට ඉඩ සලසන runtime environment එකකි. npm (Node Package Manager) යනු React වැනි JavaScript පුස්තකාල (packages) බාගත කිරීමට සහ කළමනාකරණය කිරීමට ඇති මෙවලමකි. ඔබ Node.js ස්ථාපනය කරන විට, npm ස්වයංක්රීයවම ස්ථාපනය වේ.
පැරණි `create-react-app` මෙවලම වෙනුවට, අද React ව්යාපෘති ආරම්භ කිරීමට ඇති වේගවත්ම සහ නවීනතම ක්රමය වන්නේ **Vite** (වීට් ලෙස උච්චාරණය කරයි) භාවිතා කිරීමයි.
npm create vite@latest
cd react-todo-app
npm install
npm run dev
දැන් ඔබගේ වෙබ් බ්රව්සරයෙන්, terminal එකේ පෙන්වන `localhost` ලිපිනයට (උදා: `http://localhost:5173/`) පිවිසෙන්න. ඔබට React + Vite හි පිළිගැනීමේ පිටුව දිස්වනු ඇත!
ඔබගේ `react-todo-app` ෆෝල්ඩරය VS Code එකෙන් විවෘත කරගන්න. අපගේ සියලුම කේත ලිවීම් සිදුවන්නේ `src` ෆෝල්ඩරය තුළය.
React හි ඇති සුවිශේෂී ලක්ෂණයක් නම් **JSX (JavaScript XML)** යි. JSX මගින් අපට JavaScript ගොනු තුළම, HTML වලට බෙහෙවින් සමාන syntax එකක් ලිවීමට ඉඩ සලසයි. මෙය කේතය වඩාත් දෘශ්යමාන සහ තේරුම් ගැනීමට පහසු කරයි.
// මෙය JSX වේ
const element = <h1>Hello, Egotechworld!</h1>;
මෙය බ්රව්සරයට කෙලින්ම තේරුම් ගත නොහැක. Vite වැනි මෙවලම් මගින්, මෙම JSX කේතය, බ්රව්සරයට තේරුම්ගත හැකි සාමාන්ය JavaScript බවට පරිවර්තනය (compile) කරයි.
HTML සහ JSX අතර ප්රධාන වෙනස්කම් කිහිපයක්:
Component එකක් යනු UI එකේ ස්වාධීන, නැවත භාවිතා කළ හැකි කොටසකි. නූතන React හිදී, Component එකක් යනු JSX return කරන සරල JavaScript function එකකි. අපගේ යෙදුමේ ප්රධාන component එක `src/App.jsx` ගොනුවේ ඇත.
පළමුව, `App.jsx` සහ `App.css` ගොනු වල ඇති අනවශ්ය කේත සියල්ල ඉවත් කර, එය මෙසේ සකස් කරගනිමු:
`src/App.jsx`:
import './App.css';
function App() {
return (
<div className="app-container">
<h1>My React To-Do List</h1>
</div>
);
}
export default App;
දැන් ඔබගේ බ්රව්සරය දෙස බැලුවහොත්, ඔබට පෙනෙන්නේ මෙම සරල මාතෘකාව පමණි.
React යෙදුම් ගතික (dynamic) වන්නේ State සහ Props නිසාය.
State යනු component එකක් තුළ පවතින, කාලයත් සමඟ වෙනස් විය හැකි දත්ත වේ. Component එකක State එක වෙනස් වූ විට, React ස්වයංක්රීයව එම component එක නැවත render කර, UI එක යාවත්කාලීන කරයි.
Functional components වලට state එක් කිරීමට, අපි **Hooks** නම් විශේෂ functions භාවිතා කරමු. ඒ අතරින් ප්රධානම Hook එක තමයි `useState`.
අපි අපගේ `App.jsx` එකට state එක් කර, To-Do ලැයිස්තුවක් පෙන්වමු.
`src/App.jsx`:
import { useState } from 'react'; // useState import කරන්න
import './App.css';
function App() {
// State variables
const [tasks, setTasks] = useState([
{ id: 1, title: "Learn React Basics", completed: false },
{ id: 2, title: "Build a To-Do App", completed: false },
{ id: 3, title: "Deploy the App", completed: false },
]);
return (
<div className="app-container">
<h1>My React To-Do List</h1>
<div className="todo-list">
<ul>
{/* JavaScript .map() function එක භාවිතා කර tasks state එක loop කිරීම */}
{tasks.map(task => (
<li key={task.id}>{task.title}</li>
))}
</ul>
</div>
</div>
);
}
export default App;
මෙහිදී, `{tasks.map(...)`}` මගින්, `tasks` array එකේ ඇති සෑම task object එකක් සඳහාම `
Props (Properties)** යනු parent component එකක සිට child component එකකට දත්ත යැවීමේ ක්රමයයි. Props, child component එක තුළ වෙනස් කළ නොහැක (read-only).
දැන් අපි අපගේ යෙදුමට නව කාර්යයන් ඇතුළත් කිරීමට සහ මැකීමට අවශ්ය ක්රියාකාරීත්වය එක් කරමු.
අපි `App.jsx` ගොනුවට form එකක් සහ එය හැසිරවීමට අවශ්ය තර්කනය එක් කරමු.
`src/App.jsx`:
import { useState } from 'react';
import './App.css';
function App() {
const [tasks, setTasks] = useState([
{ id: 1, title: "Learn React Basics", completed: false },
{ id: 2, title: "Build a To-Do App", completed: false },
]);
// Input field එක සඳහා නව state එකක්
const [newTask, setNewTask] = useState('');
const handleAddTask = (e) => {
e.preventDefault(); // Form එක submit වන විට පිටුව refresh වීම වැළැක්වීම
if (newTask.trim() === '') return; // හිස් කාර්යයන් ඇතුළත් කිරීම නැවැත්වීම
const newTodo = {
id: Date.now(), // අනන්ය id එකක් ලබා දීම
title: newTask,
completed: false,
};
setTasks([...tasks, newTodo]); // පවතින tasks ලැයිස්තුවට නව task එක එක් කිරීම
setNewTask(''); // Input field එක හිස් කිරීම
};
return (
<div className="app-container">
<h1>My React To-Do List</h1>
<!-- Add Task Form -->
<form onSubmit={handleAddTask} className="todo-form">
<input
type="text"
value={newTask}
onChange={(e) => setNewTask(e.target.value)}
placeholder="Add a new task..."
/>
<button type="submit">Add Task</button>
</form>
<!-- The rest of the list rendering code -->
...
</div>
);
}
export default App;
දැන්, එක් එක් task එකට අදාළව delete බොත්තමක් සහ එයට අදාළ තර්කනය එක් කරමු.
`src/App.jsx` තුළට එක් කළ යුතු function එක:
const handleDeleteTask = (taskId) => {
// මැකිය යුතු task එක හැර, අනෙක් සියලුම tasks අඩංගු නව array එකක් සෑදීම
const updatedTasks = tasks.filter(task => task.id !== taskId);
setTasks(updatedTasks);
};
List rendering කොටස මෙසේ වෙනස් කරන්න:
{tasks.map(task => (
<li key={task.id}>
<span>{task.title}</span>
<button onClick={() => handleDeleteTask(task.id)}>Delete</button>
</li>
))}
සුබ පැතුම්! ඔබ React හි මූලික සහ බලවත්ම සංකල්ප භාවිතා කර, සම්පූර්ණයෙන්ම අන්තර්ක්රියාකාරී front-end යෙදුමක් සාර්ථකව නිර්මාණය කළා. මෙය නූතන වෙබ් සංවර්ධනයේ ඉතා වැදගත් සන්ධිස්ථානයකි.
අපි මෙම පාඩමෙන් ඉගෙන ගත් දේ:
ඔබ දැන් අපගේ මූලික පාඩම් මාලාව සම්පූර්ණ කර ඇත. ඔබ ස්ථිතික වෙබ් අඩවි, PHP සහ Python භාවිතා කර ගතික server-side යෙදුම්, සහ දැන් React භාවිතා කර නවීන front-end යෙදුම් නිර්මාණය කිරීමට අවශ්ය අත්තිවාරම දමාගෙන ඇත. මෘදුකාංග සංවර්ධකයාගේ ගමන යනු නිරන්තර ඉගෙනීමකි. නිර්මාණශීලී වන්න, නව ව්යාපෘති අත්හදා බලන්න, සහ කිසිවිටෙක ඉගෙනීම නතර නොකරන්න.
ඔබගේ අනාගත ICT සහ Programming ගමනට Egotechworld වෙතින් උණුසුම් සුබ පැතුම්!