React Sinhala Tutorial

නූතන වෙබ් ලෝකයේ පෙරළියක් කළ, අන්තර්ක්‍රියාකාරී පරිශීලක අතුරුමුහුණත් (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 මෙතරම් ජනප්‍රිය?

මෙම නිබන්ධනයෙන්, අපි React හි මෙම මූලික සංකල්ප ඉගෙන ගනිමින්, සම්භාව්‍ය **"කළ යුතු දේ ලැයිස්තුවක්" (To-Do App)** මුල සිටම නිර්මාණය කරමු.

පූර්ව අවශ්‍යතා: මෙම පාඩම සඳහා HTML, CSS, සහ නූතන JavaScript (ES6+), විශේෂයෙන් functions, arrays (`.map`, `.filter`), සහ objects පිළිබඳව හොඳ අවබෝධයක් තිබීම ඉතා වැදගත් වේ.


1 වන කොටස: React සංවර්ධන පරිසරය සකසා ගැනීම (Setting Up the Environment) ⚛️

React යෙදුමක් නිර්මාණය කිරීමට, අපගේ පරිගණකයේ Node.js සහ npm ස්ථාපනය කර තිබිය යුතුය.

1.1 Node.js සහ npm ස්ථාපනය කිරීම

Node.js යනු JavaScript, වෙබ් බ්‍රව්සරයෙන් පිටත (ඔබගේ පරිගණකයේ) ක්‍රියාත්මක කිරීමට ඉඩ සලසන runtime environment එකකි. npm (Node Package Manager) යනු React වැනි JavaScript පුස්තකාල (packages) බාගත කිරීමට සහ කළමනාකරණය කිරීමට ඇති මෙවලමකි. ඔබ Node.js ස්ථාපනය කරන විට, npm ස්වයංක්‍රීයවම ස්ථාපනය වේ.

  1. nodejs.org වෙබ් අඩවියට පිවිසෙන්න.
  2. **LTS (Long-Term Support)** සංස්කරණය බාගත කර, සාමාන්‍ය මෘදුකාංගයක් මෙන් ස්ථාපනය කරගන්න.
  3. Command Prompt හෝ Terminal එක විවෘත කර, `node -v` සහ `npm -v` යන විධාන ක්‍රියාත්මක කිරීමෙන් ස්ථාපනය සාර්ථකදැයි පරීක්ෂා කරන්න.

1.2 Vite සමඟ නව React App එකක් සෑදීම

පැරණි `create-react-app` මෙවලම වෙනුවට, අද React ව්‍යාපෘති ආරම්භ කිරීමට ඇති වේගවත්ම සහ නවීනතම ක්‍රමය වන්නේ **Vite** (වීට් ලෙස උච්චාරණය කරයි) භාවිතා කිරීමයි.

  1. ඔබගේ Terminal එකේ, ඔබ ව්‍යාපෘතිය සෑදීමට කැමති ෆෝල්ඩරයට පිවිසෙන්න.
  2. පහත විධානය ක්‍රියාත්මක කරන්න:
    npm create vite@latest
  3. Vite මගින් අසන ප්‍රශ්න වලට පිළිතුරු දෙන්න:
    • Project name: `react-todo-app`
    • Select a framework: `React` (arrow keys වලින් තෝරන්න)
    • Select a variant: `JavaScript`
  4. දැන්, Vite මගින් පෙන්වන උපදෙස් අනුගමනය කරන්න:
    cd react-todo-app
    npm install
    npm run dev
    • `npm install`: ව්‍යාපෘතියට අවශ්‍ය සියලුම packages (React ඇතුළුව) බාගත කරයි.
    • `npm run dev`: සංවර්ධන සර්වරය (development server) පණ ගන්වයි.

දැන් ඔබගේ වෙබ් බ්‍රව්සරයෙන්, terminal එකේ පෙන්වන `localhost` ලිපිනයට (උදා: `http://localhost:5173/`) පිවිසෙන්න. ඔබට React + Vite හි පිළිගැනීමේ පිටුව දිස්වනු ඇත!


2 වන කොටස: React හි මූලිකාංග - Components සහ JSX 🧱

ඔබගේ `react-todo-app` ෆෝල්ඩරය VS Code එකෙන් විවෘත කරගන්න. අපගේ සියලුම කේත ලිවීම් සිදුවන්නේ `src` ෆෝල්ඩරය තුළය.

2.1 JSX යනු කුමක්ද?

React හි ඇති සුවිශේෂී ලක්ෂණයක් නම් **JSX (JavaScript XML)** යි. JSX මගින් අපට JavaScript ගොනු තුළම, HTML වලට බෙහෙවින් සමාන syntax එකක් ලිවීමට ඉඩ සලසයි. මෙය කේතය වඩාත් දෘශ්‍යමාන සහ තේරුම් ගැනීමට පහසු කරයි.

// මෙය JSX වේ
const element = <h1>Hello, Egotechworld!</h1>;

මෙය බ්‍රව්සරයට කෙලින්ම තේරුම් ගත නොහැක. Vite වැනි මෙවලම් මගින්, මෙම JSX කේතය, බ්‍රව්සරයට තේරුම්ගත හැකි සාමාන්‍ය JavaScript බවට පරිවර්තනය (compile) කරයි.

HTML සහ JSX අතර ප්‍රධාන වෙනස්කම් කිහිපයක්:

2.2 Components (කොටස්)

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;

දැන් ඔබගේ බ්‍රව්සරය දෙස බැලුවහොත්, ඔබට පෙනෙන්නේ මෙම සරල මාතෘකාව පමණි.


3 වන කොටස: React හි හදවත - State සහ Props ❤️

React යෙදුම් ගතික (dynamic) වන්නේ State සහ Props නිසාය.

3.1 State - Component එකේ මතකය (`useState` Hook)

State යනු component එකක් තුළ පවතින, කාලයත් සමඟ වෙනස් විය හැකි දත්ත වේ. Component එකක State එක වෙනස් වූ විට, React ස්වයංක්‍රීයව එම component එක නැවත render කර, UI එක යාවත්කාලීන කරයි.

Functional components වලට state එක් කිරීමට, අපි **Hooks** නම් විශේෂ functions භාවිතා කරමු. ඒ අතරින් ප්‍රධානම Hook එක තමයි `useState`.

සරල උපමාව: `useState` යනු component එකට පුද්ගලික සුදු ලෑල්ලක් (whiteboard) ලබා දීමක් වැනිය.

අපි අපගේ `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 එකක් සඳහාම `

  • ` element එකක් නිර්මාණය කර පෙන්වයි. React වලදී list එකක් render කිරීමේදී, සෑම අංගයකටම අනන්‍ය `key` එකක් ලබා දීම අනිවාර්ය වේ.

    3.2 Props - දත්ත පහළට ගලා යාම

    Props (Properties)** යනු parent component එකක සිට child component එකකට දත්ත යැවීමේ ක්‍රමයයි. Props, child component එක තුළ වෙනස් කළ නොහැක (read-only).


    4 වන කොටස: To-Do App එක සම්පූර්ණ කිරීම (CRUD Operations) ✅

    දැන් අපි අපගේ යෙදුමට නව කාර්යයන් ඇතුළත් කිරීමට සහ මැකීමට අවශ්‍ය ක්‍රියාකාරීත්වය එක් කරමු.

    4.1 නව කාර්යයක් එක් කිරීම (Create)

    අපි `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;
    

    4.2 කාර්යයක් මැකීම (Delete)

    දැන්, එක් එක් 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 යෙදුමක් සාර්ථකව නිර්මාණය කළා. මෙය නූතන වෙබ් සංවර්ධනයේ ඉතා වැදගත් සන්ධිස්ථානයකි.

    අපි මෙම පාඩමෙන් ඉගෙන ගත් දේ:

    • **Vite** භාවිතා කර නවීන React ව්‍යාපෘතියක් ආරම්භ කරන ආකාරය.
    • UI එක, නැවත භාවිතා කළ හැකි **Components** වලට කඩන ආකාරය.
    • JavaScript තුළ HTML වැනි syntax එකක් වන **JSX** ලියන ආකාරය.
    • `useState` Hook එක භාවිතා කර, component එකක මතකය වන **State** කළමනාකරණය කරන ආකාරය.
    • පරිශීලක ක්‍රියාකාරකම් (user events) වලට ප්‍රතිචාර දක්වා, State එක යාවත්කාලීන කර, UI එක ස්වයංක්‍රීයව re-render කරවන ආකාරය.

    ඔබ දැන් අපගේ මූලික පාඩම් මාලාව සම්පූර්ණ කර ඇත. ඔබ ස්ථිතික වෙබ් අඩවි, PHP සහ Python භාවිතා කර ගතික server-side යෙදුම්, සහ දැන් React භාවිතා කර නවීන front-end යෙදුම් නිර්මාණය කිරීමට අවශ්‍ය අත්තිවාරම දමාගෙන ඇත. මෘදුකාංග සංවර්ධකයාගේ ගමන යනු නිරන්තර ඉගෙනීමකි. නිර්මාණශීලී වන්න, නව ව්‍යාපෘති අත්හදා බලන්න, සහ කිසිවිටෙක ඉගෙනීම නතර නොකරන්න.

    ඔබගේ අනාගත ICT සහ Programming ගමනට Egotechworld වෙතින් උණුසුම් සුබ පැතුම්!