บทช่วย สอนตอบโต้

หน้าแรก แนะนำตัว ตอบสนอง เริ่มต้น ตอบสนอง ES6 React Render HTML ตอบโต้ JSX ส่วนประกอบปฏิกิริยา คลาสตอบโต้ ตอบสนองอุปกรณ์ประกอบฉาก ปฏิกิริยาเหตุการณ์ เงื่อนไขการตอบสนอง รายการตอบโต้ แบบฟอร์มตอบโต้ ตอบสนองเราเตอร์ บันทึกโต้ตอบ ตอบสนอง CSS จัดแต่งทรงผม ตอบสนอง Sass จัดแต่งทรงผม

ตะขอตอบสนอง

ตะขอคืออะไร? ใช้สถานะ ใช้เอฟเฟกต์ ใช้บริบท ใช้Ref ใช้ลด ใช้โทรกลับ ใช้บันทึก ตะขอแบบกำหนดเอง

แบบฝึกหัดตอบโต้

ตอบคำถาม แบบฝึกหัดตอบโต้ ใบรับรองปฏิกิริยา

แบบฟอร์มตอบโต้


เช่นเดียวกับใน HTML React ใช้แบบฟอร์มเพื่อให้ผู้ใช้สามารถโต้ตอบกับหน้าเว็บได้


การเพิ่มแบบฟอร์มใน React

คุณเพิ่มแบบฟอร์มด้วย React เช่นเดียวกับองค์ประกอบอื่น ๆ :

ตัวอย่าง:

เพิ่มแบบฟอร์มที่อนุญาตให้ผู้ใช้ป้อนชื่อ:

function MyForm() {
  return (
    <form>
      <label>Enter your name:
        <input type="text" />
      </label>
    </form>
  )
}
ReactDOM.render(<MyForm />, document.getElementById('root'));

ซึ่งจะทำงานได้ตามปกติ แบบฟอร์มจะส่งและหน้าจะรีเฟรช

แต่นี่ไม่ใช่สิ่งที่เราต้องการให้เกิดขึ้นใน React

เราต้องการป้องกันพฤติกรรมเริ่มต้นนี้และให้ React ควบคุมแบบฟอร์ม


แบบฟอร์มการจัดการ

แบบฟอร์มการจัดการเป็นเรื่องเกี่ยวกับวิธีที่คุณจัดการกับข้อมูลเมื่อมีการเปลี่ยนแปลงค่าหรือถูกส่ง

ใน HTML ข้อมูลแบบฟอร์มมักจะถูกจัดการโดย DOM

ใน React ข้อมูลแบบฟอร์มมักจะถูกจัดการโดยส่วนประกอบ

เมื่อข้อมูลได้รับการจัดการโดยส่วนประกอบ ข้อมูลทั้งหมดจะถูกเก็บไว้ในสถานะส่วนประกอบ

คุณควบคุมการเปลี่ยนแปลงได้โดยเพิ่มตัวจัดการเหตุการณ์ใน onChangeแอตทริบิวต์

เราสามารถใช้useStateHook เพื่อติดตามค่าอินพุตแต่ละรายการและให้ "แหล่งความจริงเดียว" สำหรับแอปพลิเคชันทั้งหมด

ดูส่วนReact Hooksสำหรับข้อมูลเพิ่มเติมเกี่ยวกับ Hooks

ตัวอย่าง:

ใช้onChangeHook เพื่อจัดการอินพุต:

import { useState } from "react";
import ReactDOM from 'react-dom';

function MyForm() {
  const [name, setName] = useState("");

  return (
    <form>
      <label>Enter your name:
        <input
          type="text" 
          value={name}
          onChange={(e) => setName(e.target.value)}
        />
      </label>
    </form>
  )
}

ReactDOM.render(<MyForm />, document.getElementById('root'));


w3schools CERTIFIED . 2022

ได้รับการรับรอง!

ทำโมดูล React ทำแบบฝึกหัด ทำข้อสอบ และได้รับการรับรองจาก w3schools!!

$95 ลงทะเบียน

ส่งแบบฟอร์ม

คุณสามารถควบคุมการส่งโดยเพิ่มตัวจัดการเหตุการณ์ในonSubmitแอตทริบิวต์สำหรับ<form>:

ตัวอย่าง:

เพิ่มปุ่มส่งและตัวจัดการเหตุการณ์ในonSubmitแอตทริบิวต์:

import { useState } from "react";
import ReactDOM from 'react-dom';

function MyForm() {
  const [name, setName] = useState("");

  const handleSubmit = (event) => {
    event.preventDefault();
    alert(`The name you entered was: ${name}`)
  }

  return (
    <form onSubmit={handleSubmit}>
      <label>Enter your name:
        <input 
          type="text" 
          value={name}
          onChange={(e) => setName(e.target.value)}
        />
      </label>
      <input type="submit" />
    </form>
  )
}

ReactDOM.render(<MyForm />, document.getElementById('root'));


ช่องใส่หลายช่อง

คุณสามารถควบคุมค่าของช่องใส่ข้อมูลมากกว่าหนึ่งช่องโดยเพิ่ม nameแอตทริบิวต์ให้กับแต่ละองค์ประกอบ

เราจะเริ่มต้นสถานะของเราด้วยวัตถุว่างเปล่า

ในการเข้าถึงฟิลด์ในตัวจัดการเหตุการณ์ ให้ใช้ ไวยากรณ์event.target.nameและ event.target.value

หากต้องการอัพเดตสถานะ ให้ใช้วงเล็บเหลี่ยม [bracket notation] รอบชื่อคุณสมบัติ

ตัวอย่าง:

เขียนแบบฟอร์มที่มีช่องป้อนข้อมูลสองช่อง:

import { useState } from "react";
import ReactDOM from "react-dom";

function MyForm() {
  const [inputs, setInputs] = useState({});

  const handleChange = (event) => {
    const name = event.target.name;
    const value = event.target.value;
    setInputs(values => ({...values, [name]: value}))
  }

  const handleSubmit = (event) => {
    event.preventDefault();
    alert(inputs);
  }

  return (
    <form onSubmit={handleSubmit}>
      <label>Enter your name:
      <input 
        type="text" 
        name="username" 
        value={inputs.username || ""} 
        onChange={handleChange}
      />
      </label>
      <label>Enter your age:
        <input 
          type="number" 
          name="age" 
          value={inputs.age || ""} 
          onChange={handleChange}
        />
        </label>
        <input type="submit" />
    </form>
  )
}

ReactDOM.render(<MyForm />, document.getElementById('root'));

หมายเหตุ:เราใช้ฟังก์ชันตัวจัดการเหตุการณ์เดียวกันสำหรับช่องป้อนข้อมูลทั้งสองช่อง เราสามารถเขียนตัวจัดการเหตุการณ์ได้หนึ่งตัวสำหรับแต่ละช่อง แต่สิ่งนี้ช่วยให้โค้ดสะอาดขึ้นและเป็นวิธีที่แนะนำใน React


Textarea

องค์ประกอบ textarea ใน React นั้นแตกต่างจาก HTML ทั่วไปเล็กน้อย

ใน HTML ค่าของ textarea คือข้อความระหว่างแท็กเริ่มต้นและแท็ <textarea> สิ้นสุด</textarea>

<textarea>
  Content of the textarea.
</textarea>

ใน React ค่าของ textarea จะถูกวางไว้ใน value แอตทริบิวต์ เราจะใช้useStateHook เพื่อจัดการค่าของ textarea:

ตัวอย่าง:

textarea ง่าย ๆ ที่มีเนื้อหาบางส่วน:

import { useState } from "react";
import ReactDOM from "react-dom";

function MyForm() {
  const [textarea, setTextarea] = useState(
    "The content of a textarea goes in the value attribute"
  );

  const handleChange = (event) => {
    setTextarea(event.target.value)
  }

  return (
    <form>
      <textarea value={textarea} onChange={handleChange} />
    </form>
  )
}

ReactDOM.render(<MyForm />, document.getElementById('root'));


เลือก

รายการดรอปดาวน์หรือกล่องเลือกใน React นั้นแตกต่างจาก HTML เล็กน้อย

ใน HTML ค่าที่เลือกในรายการแบบหล่นลงถูกกำหนดด้วยselectedแอตทริบิวต์:

HTML:

<select>
  <option value="Ford">Ford</option>
  <option value="Volvo" selected>Volvo</option>
  <option value="Fiat">Fiat</option>
</select>

ใน React ค่าที่เลือกถูกกำหนดด้วยvalue แอตทริบิวต์บนselectแท็ก:

ตัวอย่าง:

กล่องเลือกอย่างง่ายซึ่งค่าที่เลือก "Volvo" ถูกเตรียมใช้งานในตัวสร้าง:

function MyForm() {
  const [myCar, setMyCar] = useState("Volvo");

  const handleChange = (event) => {
    setMyCar(event.target.value)
  }

  return (
    <form>
      <select value={myCar} onChange={handleChange}>
        <option value="Ford">Ford</option>
        <option value="Volvo">Volvo</option>
        <option value="Fiat">Fiat</option>
      </select>
    </form>
  )
}


ด้วยการเปลี่ยนแปลงเล็กน้อยเหล่านี้<textarea>และ<select>React สามารถจัดการองค์ประกอบอินพุตทั้งหมดได้ในลักษณะเดียวกัน