0Pricing
TypeScript Academy · บทเรียน

การระบุชนิด useState และ useReducer

เพิ่มพารามิเตอร์ชนิดให้ฮุกสถานะของ React

การระบุชนิด useState และ useReducer เป็นบทเรียน TypeScript Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน TypeScript Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส TypeScript Academy มีบทเรียนทั้งหมด 4 บทเรียน

ยินดีต้อนรับ

บทเรียนนี้ครอบคลุมการกำหนดชนิดให้ useState และ useReducer ใน TypeScript ด้วย React

อินเทอร์เฟซของพร็อพองค์ประกอบ

กำหนดอินเทอร์เฟซของพร็อพสำหรับองค์ประกอบ React เพื่ออธิบายและบังคับใช้ส่วนติดต่อขององค์ประกอบ
interface ButtonProps {
  label: string;
  onClick: () => void;
  disabled?: boolean;
}

function Button({ label, onClick, disabled }: ButtonProps) {
  return <button onClick={onClick} disabled={disabled}>{label}</button>;
}

FC เทียบกับชนิดค่าที่ส่งกลับที่ระบุอย่างชัดเจน

React.FC เพิ่มองค์ประกอบลูกและชนิดอื่น ๆ ให้อัตโนมัติ ชนิดค่าที่ส่งกลับที่ระบุอย่างชัดเจน (JSX.Element | null) มักจะชัดเจนกว่า
const Card: React.FC<{title: string}> = ({ title }) => <div>{title}</div>;

// Or explicit:
function Card2({ title }: { title: string }): JSX.Element {
  return <div>{title}</div>;
}

การกำหนดชนิดให้ useState

useState อนุมานชนิดจากค่าเริ่มต้น โปรดระบุพารามิเตอร์ชนิดเมื่อค่าเริ่มต้นเป็น null หรือไม่ชัดเจน
const [count, setCount] = useState(0);           // number
const [name, setName] = useState('');            // string
const [user, setUser] = useState<User | null>(null); // explicit

การกำหนดชนิดให้ useReducer

useReducer ทำงานได้ดีที่สุดเมื่อใช้ชนิดแอ็กชันแบบยูเนียนที่จำแนกด้วยตัวระบุ
type Action = { type: 'increment' } | { type: 'decrement' } | { type: 'reset'; value: number };
function reducer(state: number, action: Action): number {
  switch (action.type) {
    case 'increment': return state + 1;
    case 'decrement': return state - 1;
    case 'reset': return action.value;
  }
}

การกำหนดชนิดให้ useRef สำหรับ DOM

useRef สำหรับองค์ประกอบ DOM ต้องมีอาร์กิวเมนต์ชนิด ให้เริ่มต้นด้วย null เนื่องจากองค์ประกอบยังไม่มีอยู่
const inputRef = useRef<HTMLInputElement>(null);

// Use:
if (inputRef.current) {
  inputRef.current.focus();
}

การกำหนดชนิดให้ตัวจัดการเหตุการณ์

ชนิดเหตุการณ์ของ React ได้แก่ React.ChangeEvent, React.MouseEvent และ React.FormEvent
function handleChange(e: React.ChangeEvent<HTMLInputElement>) {
  console.log(e.target.value);
}
function handleClick(e: React.MouseEvent<HTMLButtonElement>) {
  e.preventDefault();
}

องค์ประกอบแบบเจเนอริก

องค์ประกอบแบบเจเนอริกรับพารามิเตอร์ชนิดเพื่อรองรับรายการและรายการเลือกที่ยืดหยุ่นและปลอดภัยด้านชนิด
function List<T extends { id: number }>({ items }: { items: T[] }) {
  return <ul>{items.map(i => <li key={i.id}>{JSON.stringify(i)}</li>)}</ul>;
}

forwardRef กับ TypeScript

forwardRef ต้องใช้พารามิเตอร์ชนิดทั้งสำหรับชนิดองค์ประกอบของ ref และพร็อพ
const Input = React.forwardRef<HTMLInputElement, InputProps>(
  ({ label, ...props }, ref) => (
    <label>{label}<input {...props} ref={ref} /></label>
  )
);

ชนิดค่าที่ส่งกลับของฮุกแบบกำหนดเอง

ระบุชนิดค่าที่ส่งกลับของฮุกแบบกำหนดเองอย่างชัดเจน เพื่อหลีกเลี่ยงการอนุมาน any[] สำหรับค่าที่ส่งกลับแบบทูเพิล
function useToggle(init: boolean): [boolean, () => void] {
  const [state, setState] = useState(init);
  return [state, () => setState(s => !s)];
}

Context กับ TypeScript

กำหนดชนิดให้คอนเท็กซ์ของ React ด้วยยูเนียนที่รวม undefined เพื่อบังคับให้ผู้ใช้ตรวจสอบคอนเท็กซ์
const AuthContext = React.createContext<User | undefined>(undefined);
function useAuth(): User {
  const ctx = useContext(AuthContext);
  if (!ctx) throw new Error('useAuth must be used within AuthProvider');
  return ctx;
}

ตรวจสอบสั้น ๆ

ชนิดที่ถูกต้องสำหรับ ref ไปยังองค์ประกอบช่องป้อนข้อมูล HTML คืออะไร

สรุปทบทวน

กำหนดชนิดให้พร็อพของ React ด้วยอินเทอร์เฟซ กำหนดชนิดให้ useState ด้วยพารามิเตอร์ชนิด กำหนดชนิดเหตุการณ์ด้วยชนิดเหตุการณ์ของ React กำหนดชนิด ref ด้วยเจเนอริกขององค์ประกอบ DOM และใช้ forwardRef พร้อมพารามิเตอร์ชนิดสองรายการ องค์ประกอบแบบเจเนอริกช่วยให้สร้างส่วนติดต่อผู้ใช้ที่นำกลับมาใช้ใหม่ได้และปลอดภัยด้านชนิด

คำถามที่พบบ่อย

บทเรียน “การระบุชนิด useState และ useReducer” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การระบุชนิด useState และ useReducer” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส TypeScript Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส TypeScript Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การระบุชนิด useState และ useReducer”

เพิ่มพารามิเตอร์ชนิดให้ฮุกสถานะของ React คุณปฏิบัติ TypeScript Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน TypeScript Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน TypeScript Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “การระบุชนิด useState และ useReducer” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน TypeScript Academy นี้ได้ไหม

ได้ บทเรียน TypeScript Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การระบุชนิดพร็อพของคอมโพเนนต์ React
  2. การระบุชนิด useState และ useReducer
  3. การระบุชนิด useRef และตัวจัดการเหตุการณ์
  4. คอมโพเนนต์เจเนอริกและ forwardRef
← กลับไปที่ TypeScript Academy