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

อินพุตแบบไม่ควบคุมด้วย useRef

เข้าถึงค่าของอินพุต DOM ผ่าน ref แทนสถานะสำหรับกรณีแบบฟอร์มอย่างง่าย

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

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

ในบทเรียนนี้ คุณจะได้ใช้ช่องกรอกข้อมูลแบบไม่ถูกควบคุมร่วมกับ useRef เพื่อเข้าถึงค่าช่องกรอกข้อมูลใน DOM โดยไม่ต้องจัดการค่าดังกล่าวในสถานะของ React

แบบถูกควบคุมและแบบไม่ถูกควบคุม

**ช่องกรอกข้อมูลแบบถูกควบคุม** มีค่าที่ขับเคลื่อนโดยสถานะของ React (value + onChange) ส่วน **ช่องกรอกข้อมูลแบบไม่ถูกควบคุม** จะจัดการค่าของตนเองใน DOM โดย React จะอ่านค่าผ่านรีเฟอเรนซ์เมื่อจำเป็นเท่านั้น
// Controlled
<input value={name} onChange={e => setName(e.target.value)} />

// Uncontrolled
const nameRef = useRef();
<input ref={nameRef} defaultValue="" />

การอ่านค่าเมื่อส่งแบบฟอร์ม

สำหรับช่องกรอกข้อมูลแบบไม่ถูกควบคุม ให้อ่านค่าเมื่อผู้ใช้ส่งแบบฟอร์มโดยเข้าถึง `ref.current.value` จะไม่มีการอัปเดตสถานะขณะที่ผู้ใช้พิมพ์
function Form() {
  const nameRef = useRef();
  const handleSubmit = (e) => {
    e.preventDefault();
    console.log(nameRef.current.value);
  };
  return (
    <form onSubmit={handleSubmit}>
      <input ref={nameRef} />
      <button type="submit">Submit</button>
    </form>
  );
}

defaultValue เทียบกับ value

สำหรับช่องกรอกข้อมูลแบบไม่ถูกควบคุม ให้ใช้ `defaultValue` (ไม่ใช่ `value`) เพื่อตั้งค่าเริ่มต้น การตั้งค่า `value` โดยไม่มี `onChange` จะทำให้ React แสดงคำเตือน และช่องกรอกข้อมูลจะกลายเป็นแบบอ่านอย่างเดียว
<input ref={nameRef} defaultValue="Initial text" />

เมื่อใดควรใช้ช่องกรอกข้อมูลแบบไม่ถูกควบคุม

ช่องกรอกข้อมูลแบบไม่ถูกควบคุมมีประโยชน์สำหรับ: แบบฟอร์มอย่างง่ายที่ต้องการค่าเฉพาะตอนส่งแบบฟอร์ม ช่องกรอกไฟล์ (ซึ่ง React ไม่สามารถควบคุมได้) และช่องกรอกข้อมูลที่ต้องการประสิทธิภาพสูง ซึ่งการหลีกเลี่ยงการเรนเดอร์ซ้ำมีความสำคัญ

การรีเซ็ตช่องกรอกข้อมูลแบบไม่ถูกควบคุม

หากต้องการรีเซ็ตช่องกรอกข้อมูลแบบไม่ถูกควบคุม ให้ตั้งค่า `ref.current.value = ''` โดยตรง หรือเปลี่ยนพร็อพ `key` ของคอมโพเนนต์เพื่อบังคับให้ React เมานต์คอมโพเนนต์ใหม่ด้วยโหนด DOM ใหม่
// Reset imperatively
nameRef.current.value = '';

// Or remount
setFormKey(k => k + 1);
<input key={formKey} ref={nameRef} />

รีเฟอเรนซ์หลายตัวสำหรับช่องกรอกข้อมูลหลายช่อง

สำหรับแบบฟอร์มที่มีช่องกรอกข้อมูลแบบไม่ถูกควบคุมหลายช่อง ให้สร้างรีเฟอเรนซ์แยกกันสำหรับแต่ละช่อง เมื่อส่งแบบฟอร์ม ให้เข้าถึง `.current.value` ของรีเฟอเรนซ์แต่ละตัว
const emailRef = useRef();
const passwordRef = useRef();

<input ref={emailRef} type="email" />
<input ref={passwordRef} type="password" />

การโฟกัสเมื่อเมานต์

มักใช้ useRef เพื่อโฟกัสช่องกรอกข้อมูลโดยอัตโนมัติเมื่อคอมโพเนนต์เมานต์ ให้อ่านรีเฟอเรนซ์ภายใน useEffect หลังจากเมานต์แล้ว
const inputRef = useRef();
useEffect(() => {
  inputRef.current?.focus();
}, []);
<input ref={inputRef} />

ช่องกรอกข้อมูลแบบไม่ถูกควบคุมและการตรวจสอบความถูกต้อง

การตรวจสอบความถูกต้องของช่องกรอกข้อมูลแบบไม่ถูกควบคุมต้องอ่านค่าโดยตรงเมื่อส่งแบบฟอร์ม วิธีนี้ยุ่งยากกว่าช่องกรอกข้อมูลแบบถูกควบคุมเมื่อต้องตรวจสอบแบบเรียลไทม์ ควรเลือกใช้ช่องกรอกข้อมูลแบบถูกควบคุมเมื่อต้องการการตอบกลับทันที

ข้อแลกเปลี่ยนของ useRef

ช่องกรอกข้อมูลแบบไม่ถูกควบคุมช่วยหลีกเลี่ยงการเรนเดอร์ซ้ำ แต่ต้องแลกกับการสูญเสียความสามารถในการตอบสนองของ React คุณไม่สามารถเรนเดอร์แบบมีเงื่อนไขตามค่าช่องกรอกข้อมูลแบบเรียลไทม์ได้ หากไม่อ่านรีเฟอเรนซ์และอัปเดตสถานะด้วยตนเอง

ตรวจสอบความเข้าใจอย่างรวดเร็ว

คุณควรใช้พร็อพใดเพื่อตั้งค่าเริ่มต้นให้ช่องกรอกข้อมูลแบบไม่ถูกควบคุมใน React

สรุปทบทวน

ช่องกรอกข้อมูลแบบไม่ถูกควบคุมใช้รีเฟอเรนซ์เพื่ออ่านค่าเมื่อจำเป็น ใช้ defaultValue เพื่อตั้งค่าเริ่มต้น อ่าน ref.current.value เมื่อส่งแบบฟอร์ม และรีเซ็ตด้วยการล้างค่ารีเฟอเรนซ์หรือเปลี่ยน key

ถัดไป

บทเรียนถัดไป: **ช่องกรอกไฟล์และการอ่านข้อมูลไฟล์** — คุณจะได้จัดการช่องกรอกไฟล์ อ่านข้อมูลเมทาดาทาและข้อมูลรูปภาพด้วย FileReader

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

บทเรียน “อินพุตแบบไม่ควบคุมด้วย useRef” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “อินพุตแบบไม่ควบคุมด้วย useRef”

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

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

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

บทเรียน “อินพุตแบบไม่ควบคุมด้วย useRef” ใช้เวลานานแค่ไหน

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

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

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

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

  1. อินพุตแบบไม่ควบคุมด้วย useRef
  2. อินพุตไฟล์และการอ่านข้อมูลไฟล์
  3. ส่วนติดต่อผู้ใช้อัปโหลดไฟล์แบบลากและวาง
  4. การอัปโหลดไฟล์ไปยังแบ็กเอนด์ API
← กลับไปที่ React Academy