useReducer ใน Next.js

useReducer hook ใน Next.js เป็น hook ที่ช่วยให้คุณสามารถจัดการ state ของส่วนประกอบของคุณได้อย่างซับซ้อนยิ่งขึ้น

useReducer hook คืนกลับสามตัว:

  • ค่าเริ่มต้นของ state
  • reducer function
  • ฟังก์ชันที่สามารถใช้เพื่อส่งการกระทำไปยัง reducer

reducer function เป็นฟังก์ชันที่รับ state ก่อนหน้าและการกระทำเป็นอาร์กิวเมนต์และคืนค่า state ใหม่

ตัวอย่างเช่น ไฟล์ต่อไปนี้จะสร้างส่วนประกอบที่มี state เดียว:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import React, { useReducer } from 'react';

const reducer = (state, action) => {
switch (action) {
case 'increment':
return state + 1;
case 'decrement':
return state - 1;
default:
return state;
}
};

export default function MyComponent() {
const [count, dispatch] = useReducer(reducer, 0);

return (
<div>
The count is {count}.
<button onClick={() => dispatch('increment')}>
Increment
</button>
<button onClick={() => dispatch('decrement')}>
Decrement
</button>
</div>
);
}

ไฟล์นี้ใช้ useReducer hook เพื่อสร้าง reducer function ที่รับ state ก่อนหน้าและการกระทำเป็นอาร์กิวเมนต์และคืนค่า state ใหม่

ฟังก์ชัน dispatch() ใช้เพื่อส่งการกระทำไปยัง reducer

เมื่อผู้ใช้คลิกปุ่ม “Increment” ฟังก์ชัน dispatch('increment') จะเรียกใช้และเพิ่มค่า state หนึ่งหน่วย

เมื่อผู้ใช้คลิกปุ่ม “Decrement” ฟังก์ชัน dispatch('decrement') จะเรียกใช้และลดค่า state หนึ่งหน่วย

คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับ useReducer hook จากเอกสารประกอบของ Next.js

useReducer hook เป็นเครื่องมือที่มีประโยชน์ที่จะช่วยให้คุณจัดการ state ของส่วนประกอบของคุณได้อย่างยืดหยุ่น

สิ่งนี้ช่วยให้คุณสร้างแอปพลิเคชันที่ตอบสนองและมีประสิทธิภาพ

ความแตกต่างระหว่าง useState และ useReducer

useState hook เป็น hook ที่ง่ายกว่าและเหมาะสำหรับจัดการ state แบบง่าย ๆ

useReducer hook เป็น hook ที่มีประสิทธิภาพกว่าและเหมาะสำหรับจัดการ state แบบซับซ้อน

useReducer hook ช่วยให้คุณสามารถจัดการ state ของคุณด้วย reducer function ซึ่งช่วยให้คุณควบคุมวิธีที่ state ของคุณเปลี่ยนแปลงได้มากขึ้น

useReducer hook ยังสามารถช่วยปรับปรุงประสิทธิภาพของแอปพลิเคชันของคุณโดยหลีกเลี่ยงการ re-render ที่ไม่จำเป็น

โดยปกติแล้ว คุณควรใช้ useState hook สำหรับ state ง่าย ๆ และ useReducer hook สำหรับ state ซับซ้อน