ยินดีต้อนรับ นักพัฒนา React ผู้ใฝ่รู้! คุณได้เลือกเส้นทางที่ยอดเยี่ยม React เป็นไลบรารี JavaScript ที่ทรงพลังและเป็นที่นิยมสำหรับการสร้างส่วนต่อประสานกับผู้ใช้ (User Interfaces) และการเรียนรู้ React เป็นวิธีที่แน่นอนในการยกระดับทักษะการพัฒนาเว็บของคุณ คู่มือฉบับสมบูรณ์แบบทีละขั้นตอนนี้จะพาคุณจากศูนย์ไปสู่ฮีโร่ พร้อมมอบความรู้เชิงปฏิบัติที่คุณต้องการเพื่อเริ่มสร้างแอปพลิเคชัน React ของคุณเองในปี 2025 เราจะเน้นที่การลงมือทำ ไม่ใช่แค่อ่าน ดังนั้นเตรียมพร้อมที่จะเขียนโค้ดได้เลย!
ต้องการแพลตฟอร์มแบบ All-in-One ที่ครบวงจรสำหรับทีมพัฒนาของคุณเพื่อทำงานร่วมกันด้วย ประสิทธิภาพสูงสุด ใช่ไหม?
Apidog ตอบสนองทุกความต้องการของคุณ และ แทนที่ Postman ได้ในราคาที่เข้าถึงง่ายกว่ามาก!
มาตั้งค่าสภาพแวดล้อมการพัฒนา React ของคุณกันเถอะ
ก่อนที่เราจะเริ่มสร้างส่วนต่อประสานผู้ใช้ที่น่าทึ่งได้ เราจำเป็นต้องตั้งค่าสถานที่ทำงาน คิดว่านี่คือการเตรียมเวิร์กช็อปของคุณก่อนที่คุณจะเริ่มโปรเจกต์ใหม่
การติดตั้งสิ่งจำเป็น: Node.js และ npm
แอปพลิเคชัน React ถูกสร้างและจัดการโดยใช้ Node.js และตัวจัดการแพ็กเกจของมันคือ npm (Node Package Manager)
- Node.js: นี่คือ JavaScript runtime ที่ช่วยให้คุณสามารถรันโค้ด JavaScript นอกเว็บเบราว์เซอร์ได้
- npm: นี่คือคลังแพ็กเกจซอฟต์แวร์ขนาดใหญ่ที่คุณสามารถติดตั้งและใช้งานในโปรเจกต์ของคุณได้อย่างง่ายดาย
ในการเริ่มต้น ให้ไปที่เว็บไซต์ทางการของ Node.js และดาวน์โหลดเวอร์ชัน Long-Term Support (LTS) ล่าสุด ตัวติดตั้งใช้งานง่าย เพียงทำตามคำแนะนำบนหน้าจอ เมื่อติดตั้งเสร็จแล้ว คุณจะมีทั้ง Node.js และ npm พร้อมใช้งาน คุณสามารถตรวจสอบการติดตั้งได้โดยเปิดเทอร์มินัลหรือ Command Prompt แล้วพิมพ์:Bash
node -v
npm -v
คำสั่งเหล่านี้ควรจะแสดงเวอร์ชันของ Node.js และ npm ที่คุณติดตั้งไว้ตามลำดับ
โปรเจกต์ React แรกของคุณด้วย Vite
ในอดีต create-react-app เป็นเครื่องมือหลักสำหรับการเริ่มต้นโปรเจกต์ React ใหม่ อย่างไรก็ตาม โลกของการพัฒนาเว็บสมัยใหม่เคลื่อนไหวอย่างรวดเร็ว และในปี 2025 Vite คือตัวเลือกที่แนะนำสำหรับความเร็วและประสิทธิภาพที่น่าทึ่ง
ในการสร้างโปรเจกต์ React ใหม่ด้วย Vite ให้เปิดเทอร์มินัลของคุณและรันคำสั่งต่อไปนี้:Bash
npm create vite@latest my-first-react-app -- --template react
มาแยกย่อยคำสั่งนี้กัน:
npm create vite@latest: คำสั่งนี้ใช้ npm เพื่อรันเวอร์ชันล่าสุดของแพ็กเกจcreate-vitemy-first-react-app: นี่คือชื่อโฟลเดอร์โปรเจกต์ของคุณ คุณสามารถเปลี่ยนเป็นชื่ออื่นที่คุณต้องการได้-- --template react: นี่บอก Vite ว่าเราต้องการสร้างโปรเจกต์ด้วยเทมเพลต React
เมื่อคำสั่งเสร็จสิ้น คุณจะมีไดเรกทอรีใหม่ที่มีชื่อโปรเจกต์ของคุณ ย้ายเข้าไปในไดเรกทอรีนี้:Bash
cd my-first-react-app
ถัดไป คุณต้องติดตั้ง dependencies ของโปรเจกต์ ซึ่งเป็นแพ็กเกจอื่นๆ ที่แอปพลิเคชัน React ของคุณต้องการเพื่อให้ทำงานได้อย่างถูกต้อง รันคำสั่งนี้:Bash
npm install
สุดท้าย เพื่อดูแอปพลิเคชัน React ใหม่ล่าสุดของคุณกำลังทำงาน ให้เริ่ม development server:Bash
npm run dev
เทอร์มินัลของคุณจะแสดง URL โลคัล ซึ่งโดยปกติคือ http://localhost:5173 เปิด URL นี้ในเว็บเบราว์เซอร์ของคุณ แล้วคุณจะเห็นแอปพลิเคชัน React เริ่มต้นที่สร้างโดย Vite ขอแสดงความยินดี คุณเพิ่งตั้งค่าโปรเจกต์ React แรกของคุณเสร็จแล้ว!
หัวใจของ React: Components และ JSX
เมื่อคุณมีแอปพลิเคชัน React ที่กำลังทำงานอยู่แล้ว มาเจาะลึกแนวคิดหลักที่ทำให้ React ทรงพลังมาก: components และ JSX
Components คืออะไร?
โดยแก่นแท้แล้ว แอปพลิเคชัน React คือชุดของส่วนต่อประสานผู้ใช้ (UI) ที่นำมาใช้ซ้ำได้และมีอิสระในตัวเอง เรียกว่า components ลองนึกภาพหน้าเว็บที่สร้างขึ้นด้วยตัวต่อ LEGO ตัวต่อแต่ละชิ้นคือ component และคุณสามารถนำมาประกอบกันเพื่อสร้างโครงสร้างที่ซับซ้อนมากขึ้นได้
ในโปรเจกต์ my-first-react-app ของคุณ ให้เปิดโฟลเดอร์ src แล้วคุณจะพบไฟล์ชื่อ App.jsx นี่คือ component หลักของแอปพลิเคชันของคุณ มาทำให้เนื้อหาของมันง่ายขึ้นเพื่อทำความเข้าใจพื้นฐาน:JavaScript
// src/App.jsx
function App() {
return (
<div>
<h1>Hello, React World!</h1>
<p>This is my very first React component.</p>
</div>
);
}
export default App;
ในโค้ดนี้:
- เรากำหนดฟังก์ชัน JavaScript ชื่อ
Appนี่คือ functional component ซึ่งเป็นวิธีที่ทันสมัยและแนะนำในการสร้าง components ใน React - ฟังก์ชันนี้
returnsสิ่งที่ดูเหมือน HTML นี่คือ JSX - สุดท้าย เรา
export default Appเพื่อให้ส่วนอื่นๆ ของแอปพลิเคชันของเราสามารถใช้ component นี้ได้
ทำความเข้าใจ JSX: JavaScript XML
JSX คือส่วนขยายไวยากรณ์สำหรับ JavaScript ที่ช่วยให้คุณสามารถเขียนโค้ดที่คล้าย HTML ภายใน1 ไฟล์ JavaScript ของคุณได้ มันไม่ใช่ HTML จริงๆ แต่ทำให้การเขียนโค้ด UI ง่ายขึ้นและอ่านง่ายขึ้นมาก
เบื้องหลัง เครื่องมือที่เรียกว่า transpiler (ในกรณีของเรา ขับเคลื่อนโดย Vite) จะแปลง JSX นี้เป็น JavaScript ปกติที่เบราว์เซอร์เข้าใจได้
มาแก้ไข App.jsx ของเราเพื่อดูพลังของ JSX เราสามารถฝังนิพจน์ JavaScript ได้โดยตรงภายใน JSX ของเราโดยใช้วงเล็บปีกกา {}JavaScript
// src/App.jsx
function App() {
const name = "Beginner Developer";
const year = new Date().getFullYear();
return (
<div>
<h1>Hello, {name}!</h1>
<p>Welcome to your React journey in {year}.</p>
</div>
);
}
export default App;
บันทึกไฟล์ แล้วเบราว์เซอร์ของคุณจะอัปเดตโดยอัตโนมัติเพื่อแสดงเนื้อหาใหม่ นี่คือคุณสมบัติของ Vite ที่เรียกว่า Hot Module Replacement (HMR) และมันมอบประสบการณ์การพัฒนาที่ยอดเยี่ยม
การสร้าง Custom Component แรกของคุณ
มาสร้าง component ของเราเอง ในโฟลเดอร์ src ให้สร้างไฟล์ใหม่ชื่อ Greeting.jsxJavaScript
// src/Greeting.jsx
function Greeting() {
return (
<h2>This is a greeting from my custom component!</h2>
);
}
export default Greeting;
ตอนนี้ มาใช้ component Greeting ใหม่นี้ภายใน component App.jsx ของเราJavaScript
// src/App.jsx
import Greeting from './Greeting'; // Import the Greeting component
function App() {
const name = "Beginner Developer";
const year = new Date().getFullYear();
return (
<div>
<h1>Hello, {name}!</h1>
<p>Welcome to your React journey in {year}.</p>
<Greeting /> {/* Use the Greeting component */}
</div>
);
}
export default App;
โดยการ import และใช้ <Greeting /> เหมือนกับแท็ก HTML ปกติ เราได้ประกอบ UI ของเราจากหลาย components นี่คือพื้นฐานของการสร้างแอปพลิเคชัน React
การส่งข้อมูลด้วย Props
component Greeting ของเราค่อนข้างคงที่ จะเกิดอะไรขึ้นถ้าเราต้องการทักทายผู้คนต่างกัน? นี่คือจุดที่ props (ย่อมาจาก properties) เข้ามามีบทบาท Props คือวิธีการที่คุณส่งข้อมูลจาก parent component ไปยัง child component
ทำให้ Components มีความยืดหยุ่นด้วย Props
มาแก้ไข Greeting.jsx ของเราให้รับ prop ชื่อ nameJavaScript
// src/Greeting.jsx
function Greeting(props) {
return (
<h2>Hello, {props.name}! This is a greeting from my custom component.</h2>
);
}
export default Greeting;
ตอนนี้ ใน App.jsx เราสามารถส่ง prop ชื่อไปยัง Greeting components ของเราได้
JavaScript
// src/App.jsx
import Greeting from './Greeting';
function App() {
return (
<div>
<Greeting name="Alice" />
<Greeting name="Bob" />
<Greeting name="Charlie" />
</div>
);
}
export default App;
ตอนนี้คุณจะเห็นข้อความทักทายสามแบบ แต่ละแบบมีชื่อที่ไม่ซ้ำกัน Props ช่วยให้เราสามารถนำ components กลับมาใช้ใหม่กับข้อมูลที่แตกต่างกัน ทำให้ UI ของเรามีความยืดหยุ่นอย่างเหลือเชื่อ
แนวทางปฏิบัติ JavaScript ที่ทันสมัยและเป็นที่นิยมคือการ destructure อ็อบเจกต์ props โดยตรงในรายการพารามิเตอร์ของฟังก์ชัน มา refactor Greeting.jsx กัน:JavaScript
// src/Greeting.jsx
function Greeting({ name }) {
return (
<h2>Hello, {name}! This is a greeting from my custom component.</h2>
);
}
export default Greeting;
สิ่งนี้ให้ผลลัพธ์เดียวกัน แต่ด้วยโค้ดที่สะอาดและกระชับกว่า
การจัดการหน่วยความจำของ Component ด้วย State
ในขณะที่ props ยอดเยี่ยมสำหรับการส่งข้อมูลลงไปตามโครงสร้าง component แต่จะเกิดอะไรขึ้นเมื่อ component ต้องการจดจำและจัดการข้อมูลของตัวเอง? นี่คือจุดที่ state เข้ามามีบทบาท State คือข้อมูลที่ถูกจัดการ ภายใน component เมื่อ state ของ component เปลี่ยนแปลง React จะ re-render component นั้นโดยอัตโนมัติเพื่อสะท้อน state ใหม่
แนะนำ Hook `useState`
ในการจัดการ state ใน functional components เราใช้ฟังก์ชันพิเศษจาก React ที่เรียกว่า Hook Hook พื้นฐานที่สุดคือ useState
มาสร้าง component นับเลขอย่างง่ายเพื่อทำความเข้าใจว่า useState ทำงานอย่างไร สร้างไฟล์ใหม่ในโฟลเดอร์ src ของคุณชื่อ Counter.jsxJavaScript
// src/Counter.jsx
import { useState } from 'react';
function Counter() {
const [count, setCount] = useState(0);
return (
<div>
<p>You clicked {count} times</p>
<button onClick={() => setCount(count + 1)}>
Click me
</button>
</div>
);
}
export default Counter;
มาแยกย่อยสิ่งนี้:
import { useState } from 'react';: เรา import HookuseStateจากไลบรารี Reactconst [count, setCount] = useState(0);: นี่คือแก่นของ HookuseState- เราเรียก
useStateด้วยค่าเริ่มต้นคือ0นี่คือค่าเริ่มต้นของ state ของเรา useStateคืนค่าเป็น array ที่มีสององค์ประกอบ ซึ่งเรากำลัง destructuring:
count: ค่าปัจจุบันของ statesetCount: ฟังก์ชันที่เราสามารถใช้เพื่ออัปเดต statecountได้
<p>You clicked {count} times</p>: เราแสดงค่าปัจจุบันของ statecount<button onClick={() => setCount(count + 1)}>: เมื่อคลิกปุ่ม เราเรียกฟังก์ชันsetCountด้วยค่าใหม่ (count + 1) นี่บอก React ให้อัปเดต state
ตอนนี้ มาเพิ่ม component Counter นี้ลงใน App.jsx ของเรา:JavaScript
// src/App.jsx
import Counter from './Counter';
function App() {
return (
<div>
<h1>My Awesome React App</h1>
<Counter />
</div>
);
}
export default App;
ตอนนี้คุณควรจะเห็นตัวนับในเบราว์เซอร์ของคุณ ทุกครั้งที่คุณคลิกปุ่ม ตัวเลขจะเพิ่มขึ้น React กำลัง re-render component Counter ทุกครั้งที่ state เปลี่ยนแปลง
การตอบสนองต่อการกระทำของผู้ใช้: การจัดการ Events
การโต้ตอบคือหัวใจของเว็บแอปพลิเคชันสมัยใหม่ React มีวิธีที่เรียบง่ายและสอดคล้องกันในการจัดการ events เช่น การคลิก การส่งฟอร์ม และการป้อนข้อมูลจากคีย์บอร์ด
เราเคยเห็น event handler พื้นฐานใน component Counter ของเราแล้วด้วย onClick มาสำรวจเพิ่มเติมโดยการสร้างฟอร์มอย่างง่ายที่รับข้อมูลจากผู้ใช้
สร้างไฟล์ component ใหม่ชื่อ NameForm.jsxJavaScript
// src/NameForm.jsx
import { useState } from 'react';
function NameForm() {
const [name, setName] = useState('');
const handleSubmit = (event) => {
event.preventDefault(); // Prevents the default form submission behavior
alert(`Hello, ${name}!`);
};
return (
<form onSubmit={handleSubmit}>
<label>
Name:
<input
type="text"
value={name}
onChange={(event) => setName(event.target.value)}
/>
</label>
<button type="submit">Submit</button>
</form>
);
}
export default NameForm;
มาวิเคราะห์ component ฟอร์มนี้:
- เรามีตัวแปร state ชื่อ
nameเพื่อเก็บค่าของช่อง input - องค์ประกอบ
inputมีแอตทริบิวต์valueที่ตั้งค่าเป็น statenameของเรา สิ่งนี้ทำให้มันเป็น controlled component ซึ่ง React ควบคุมค่าของ input - event handler
onChangeถูกเรียกทุกครั้งที่ผู้ใช้พิมพ์ในช่อง input มันจะอัปเดต statenameด้วยค่าใหม่จากevent.target.value - ฟอร์ม
formมี event handleronSubmitที่เรียกฟังก์ชันhandleSubmitของเราเมื่อฟอร์มถูกส่ง - ใน
handleSubmitเราเรียกevent.preventDefault()เพื่อหยุดเบราว์เซอร์จากการโหลดหน้าเว็บใหม่ ซึ่งเป็นพฤติกรรมเริ่มต้นสำหรับการส่งฟอร์ม จากนั้นเราแสดง alert พร้อมชื่อผู้ใช้
เพิ่ม NameForm นี้ลงใน App.jsx ของคุณเพื่อดูการทำงานจริง
การแสดงข้อมูล: Conditional Rendering และ Lists
แอปพลิเคชันในโลกจริงมักจะต้องแสดงหรือซ่อนเนื้อหาตามเงื่อนไขบางอย่าง และมักจะต้องแสดงรายการข้อมูล
การแสดงและซ่อนด้วย Conditional Rendering
มาสร้าง component ที่แสดงข้อความที่แตกต่างกันขึ้นอยู่กับว่าผู้ใช้เข้าสู่ระบบหรือไม่ สร้างไฟล์ชื่อ LoginMessage.jsxJavaScript
// src/LoginMessage.jsx
function LoginMessage({ isLoggedIn }) {
if (isLoggedIn) {
return <h2>Welcome back!</h2>;
}
return <h2>Please log in.</h2>;
}
export default LoginMessage;
เรายังสามารถใช้ ternary operator เพื่อให้ Conditional Rendering กระชับขึ้นได้JavaScript
// src/LoginMessage.jsx
function LoginMessage({ isLoggedIn }) {
return (
<div>
{isLoggedIn ? <h2>Welcome back!</h2> : <h2>Please log in.</h2>}
</div>
);
}
export default LoginMessage;
จากนั้นคุณสามารถใช้ component นี้ใน App.jsx และส่ง prop isLoggedIn เพื่อดูข้อความที่แตกต่างกัน
การแสดงรายการข้อมูล
ในการ render รายการข้อมูล คุณมักจะใช้วิธีการ map() ของ array มาสร้าง component เพื่อแสดงรายการผลไม้ สร้างไฟล์ชื่อ FruitList.jsxJavaScript
// src/FruitList.jsx
function FruitList() {
const fruits = ['Apple', 'Banana', 'Cherry', 'Date'];
return (
<div>
<h3>My Favorite Fruits:</h3>
<ul>
{fruits.map((fruit, index) => (
<li key={index}>{fruit}</li>
))}
</ul>
</div>
);
}
export default FruitList;
ที่นี่ เรากำลัง map ทับ array fruits และสำหรับผลไม้แต่ละชนิด เรากำลังคืนค่าองค์ประกอบ <li>
คุณจะสังเกตเห็น prop key={index} เมื่อคุณ render รายการข้อมูล React ต้องการ key ที่ไม่ซ้ำกันสำหรับแต่ละรายการเพื่ออัปเดตรายการอย่างมีประสิทธิภาพเมื่อมีการเปลี่ยนแปลง การใช้ index ของ array เป็น key เป็นที่ยอมรับสำหรับรายการที่เรียบง่ายและคงที่ อย่างไรก็ตาม สำหรับรายการที่มีการเปลี่ยนแปลง เช่น มีการเพิ่ม ลบ หรือจัดเรียงใหม่ ควรใช้ ID ที่ไม่ซ้ำกันจากข้อมูลของคุณหากมี
การเพิ่มสไตล์ให้กับแอปพลิเคชันของคุณ
แอปพลิเคชันที่ยอดเยี่ยมต้องดูดี มีหลายวิธีในการจัดสไตล์ components React ของคุณ
CSS Stylesheets
วิธีที่ตรงไปตรงมาที่สุดคือการใช้ไฟล์ CSS ปกติ ในโฟลเดอร์ src คุณจะพบไฟล์ App.css คุณสามารถเพิ่มสไตล์ของคุณที่นั่นได้
ตัวอย่างเช่น ในการจัดสไตล์ component FruitList ของเรา คุณสามารถเพิ่มสิ่งนี้ลงใน App.css:CSS
/* src/App.css */
.fruit-list {
list-style-type: none;
padding: 0;
}
.fruit-item {
background-color: #f0f0f0;
margin: 5px 0;
padding: 10px;
border-radius: 5px;
}
จากนั้น ใน FruitList.jsx ของคุณ คุณสามารถใช้คลาส CSS เหล่านี้ได้JavaScript
// src/FruitList.jsx
import './App.css'; // Make sure to import the CSS file
function FruitList() {
const fruits = ['Apple', 'Banana', 'Cherry', 'Date'];
return (
<div>
<h3>My Favorite Fruits:</h3>
<ul className="fruit-list">
{fruits.map((fruit, index) => (
<li key={index} className="fruit-item">{fruit}</li>
))}
</ul>
</div>
);
}
export default FruitList;
โปรดสังเกตว่าเราใช้ className แทน class ใน JSX เนื่องจาก class เป็นคำสงวนใน JavaScript
CSS Modules
สำหรับแอปพลิเคชันขนาดใหญ่ CSS Modules เสนอวิธีในการกำหนดขอบเขตสไตล์ให้กับ component ที่เฉพาะเจาะจง เพื่อป้องกันความขัดแย้งของสไตล์ ไฟล์ CSS Module จะถูกตั้งชื่อด้วยส่วนขยาย .module.css
มาสร้าง FruitList.module.css กัน:CSS/* src/FruitList.module.css */ .list { list-style-type: square; } .item { color: blue; }
ตอนนี้ ใน FruitList.jsx คุณ import สไตล์เป็น object:JavaScript
// src/FruitList.jsx
import styles from './FruitList.module.css';
function FruitList() {
const fruits = ['Apple', 'Banana', 'Cherry', 'Date'];
return (
<div>
<h3>My Favorite Fruits (Styled with CSS Modules):</h3>
<ul className={styles.list}>
{fruits.map((fruit, index) => (
<li key={index} className={styles.item}>{fruit}</li>
))}
</ul>
</div>
);
}
export default FruitList;
Vite จะสร้างชื่อคลาสที่ไม่ซ้ำกันโดยอัตโนมัติ ทำให้แน่ใจว่าสไตล์ใน FruitList.module.css จะถูกนำไปใช้กับ component FruitList เท่านั้น
การนำทางภายในแอปของคุณด้วย React Router
เว็บแอปพลิเคชันส่วนใหญ่มีหลายหน้า ในการจัดการการนำทางระหว่าง "หน้า" เหล่านี้ในแอปพลิเคชันหน้าเดียว (SPA) เช่นที่สร้างด้วย React เราใช้ไลบรารีที่เรียกว่า React Router
การตั้งค่า React Router
ขั้นแรก คุณต้องติดตั้ง React Router:Bash
npm install react-router-dom
การสร้างหน้าของคุณ
มาสร้าง component หน้าอย่างง่ายสองหน้า: HomePage.jsx และ AboutPage.jsxJavaScript
// src/HomePage.jsx
function HomePage() {
return (
<div>
<h1>Home Page</h1>
<p>Welcome to the home page of our amazing app!</p>
</div>
);
}
export default HomePage;
JavaScript
// src/AboutPage.jsx
function AboutPage() {
return (
<div>
<h1>About Page</h1>
<p>This is all about our incredible application.</p>
</div>
);
}
export default AboutPage;
การกำหนดค่า Router
ตอนนี้ เราจะกำหนดค่า routes ของเราใน App.jsxJavaScript
// src/App.jsx
import { BrowserRouter as Router, Routes, Route, Link } from 'react-router-dom';
import HomePage from './HomePage';
import AboutPage from './AboutPage';
function App() {
return (
<Router>
<div>
<nav>
<ul>
<li>
<Link to="/">Home</Link>
</li>
<li>
<Link to="/about">About</Link>
</li>
</ul>
</nav>
<hr />
<Routes>
<Route path="/" element={<HomePage />} />
<Route path="/about" element={<AboutPage />} />
</Routes>
</div>
</Router>
);
}
export default App;
มาแยกย่อย components ใหม่จาก React Router:
<Router>(ในฐานะBrowserRouter): component นี้จะครอบแอปพลิเคชันทั้งหมดของคุณและเปิดใช้งานการ routing<Link>: ใช้สำหรับสร้างลิงก์นำทาง คล้ายกับแท็ก<a>แต่รับรู้ router<Routes>: component นี้จะครอบ routes แต่ละรายการของคุณ<Route>: component นี้กำหนดการแมปปิ้งระหว่าง URL path กับ component ที่จะ render
ตอนนี้ เมื่อคุณคลิกลิงก์ "Home" และ "About" เนื้อหาจะเปลี่ยนไปโดยไม่มีการโหลดหน้าเว็บใหม่ทั้งหมด คุณได้ใช้งาน client-side routing ได้สำเร็จแล้ว!
ไปต่อ: Hook `useEffect`
Hook useState ใช้สำหรับการจัดการ state ที่ส่งผลโดยตรงต่อสิ่งที่ถูก render แต่แล้ว side effects ล่ะ เช่น การดึงข้อมูลจาก API การตั้งค่า subscriptions หรือการแก้ไข DOM ด้วยตนเอง? สำหรับสิ่งเหล่านี้ เราใช้ Hook useEffect
Hook useEffect จะรันหลังจากทุก render โดยค่าเริ่มต้น มาดูการทำงานจริงโดยการสร้าง component ที่ดึงข้อมูลจาก API ปลอม
สร้างไฟล์ใหม่ DataFetcher.jsxJavaScript
// src/DataFetcher.jsx
import { useState, useEffect } from 'react';
function DataFetcher() {
const [data, setData] = useState(null);
const [loading, setLoading] = useState(true);
useEffect(() => {
// This function will be called after the component renders
const fetchData = async () => {
try {
const response = await fetch('https://jsonplaceholder.typicode.com/posts/1');
const jsonData = await response.json();
setData(jsonData);
} catch (error) {
console.error('Error fetching data:', error);
} finally {
setLoading(false);
}
};
fetchData();
}, []); // The empty dependency array is important!
if (loading) {
return <p>Loading...</p>;
}
return (
<div>
<h3>Fetched Data:</h3>
<h4>{data.title}</h4>
<p>{data.body}</p>
</div>
);
}
export default DataFetcher;
กุญแจสำคัญในการทำความเข้าใจ useEffect ที่นี่คืออาร์กิวเมนต์ที่สอง: dependency array
- หากคุณไม่ได้ระบุ dependency array effect จะรันหลังจาก render ทุกครั้ง
- หากคุณระบุ array ว่าง
[]effect จะรันเพียง ครั้งเดียว หลังจาก render ครั้งแรก นี่เหมาะสำหรับการดึงข้อมูลครั้งเดียว - หากคุณระบุค่าใน array
[prop, state]effect จะรันเมื่อใดก็ตามที่ค่าใดค่าหนึ่งในนั้นเปลี่ยนแปลง
เพิ่ม DataFetcher ลงใน App.jsx ของคุณเพื่อดูการดึงและแสดงข้อมูลเมื่อ component โหลด
บทสรุปและขั้นตอนต่อไป
คุณเดินทางมาไกลแล้ว! คุณได้เรียนรู้วิธี:
- ตั้งค่าสภาพแวดล้อมการพัฒนา React ที่ทันสมัยด้วย Vite
- สร้าง functional components และเขียน UI ด้วย JSX
- ส่งข้อมูลระหว่าง components โดยใช้ props
- จัดการ state ระดับ component ด้วย Hook
useState - จัดการ user events
- Render เนื้อหาตามเงื่อนไขและในรูปแบบรายการ
- จัดสไตล์ components ของคุณด้วย CSS และ CSS Modules
- ใช้งาน client-side routing ด้วย React Router
- จัดการ side effects ด้วย Hook
useEffect
นี่คือความสำเร็จครั้งใหญ่ และตอนนี้คุณมีพื้นฐานที่แข็งแกร่งที่จะต่อยอดได้ โลกของ React กว้างใหญ่และน่าตื่นเต้น นี่คือหัวข้อบางส่วนที่คุณอาจต้องการสำรวจต่อไป:
- Hooks เพิ่มเติม: เจาะลึก Hooks ในตัวอื่นๆ เช่น
useContext,useReducer,useCallback, และuseMemo - ไลบรารีจัดการ State: สำหรับแอปพลิเคชันขนาดใหญ่ คุณอาจต้องการโซลูชันการจัดการ state ที่แข็งแกร่งกว่า เช่น Redux, Zustand, หรือ Recoil
- React Frameworks: สำรวจ frameworks ที่สร้างขึ้นบน React เช่น Next.js สำหรับ server-side rendering และความสามารถแบบ full-stack
- การทดสอบ: เรียนรู้วิธีทดสอบ components React ของคุณโดยใช้ไลบรารีเช่น Jest และ React Testing Library
สิ่งที่สำคัญที่สุดที่คุณสามารถทำได้ตอนนี้คือ สร้างต่อไปเรื่อยๆ การฝึกฝนคือกุญแจสำคัญ ลองสร้างเว็บไซต์หรือแอปพลิเคชันง่ายๆ ที่คุณใช้ทุกวันขึ้นมาใหม่ ท้าทายตัวเองด้วยฟีเจอร์ใหม่ๆ ยิ่งคุณเขียนโค้ดมากเท่าไหร่ คุณก็จะยิ่งมั่นใจและมีทักษะมากขึ้นเท่านั้น
ยินดีต้อนรับสู่ชุมชน React ขอให้สนุกกับการเขียนโค้ด!
ต้องการแพลตฟอร์มแบบ All-in-One ที่ครบวงจรสำหรับทีมพัฒนาของคุณเพื่อทำงานร่วมกันด้วย ประสิทธิภาพสูงสุด ใช่ไหม?
Apidog ตอบสนองทุกความต้องการของคุณ และ แทนที่ Postman ได้ในราคาที่เข้าถึงง่ายกว่ามาก!
