TextInput — คืออะไร การป้อนข้อความ และ React Native

ผู้แต่ง: IT Sectr เผยแพร่เมื่อ: 2026-07-05 เวลาอ่าน: 9 นาที

คอมโพเนนต์ TextInput ใน React Native เป็นองค์ประกอบหลักสำหรับการป้อนข้อความโดยผู้ใช้ ซึ่งคล้ายกับอิลิเมนต์ input ใน HTML TextInput รองรับสถานะแบบควบคุมและไม่ควบคุม ประเภทคีย์บอร์ดต่างๆ มาสก์การป้อนข้อมูล และการจัดการเหตุการณ์โฟกัส ตาม React Native Docs, 2024 TextInput เป็นคอมโพเนนต์หลักสำหรับฟอร์ม การค้นหา แชท และสถานการณ์ใดๆ ที่ต้องการการป้อนข้อมูลจากผู้ใช้ คอมโพเนนต์จะปรับให้เข้ากับแพลตฟอร์มโดยอัตโนมัติ โดยใช้ UITextField ดั้งเดิมบน iOS และ EditText บน Android

ประเด็นสำคัญ

  • TextInput — คอมโพเนนต์ React Native สำหรับการป้อนข้อความ คล้ายกับ HTML input
  • รองรับสถานะ แบบควบคุม ผ่าน value + onChangeText
  • มี ประเภทคีย์บอร์ด: default, numeric, email, phone, url
  • เรนเดอร์เป็น UITextField บน iOS และ EditText บน Android
  • รองรับการป้อนหลายบรรทัด placeholder และ secureTextEntry สำหรับรหัสผ่าน

TextInput ใน React Native คืออะไร

TextInput เป็นคอมโพเนนต์ React Native ที่อนุญาตให้ผู้ใช้ป้อนข้อความโดยใช้คีย์บอร์ดของอุปกรณ์ เป็นส่วนประกอบหลักสำหรับฟอร์มลงทะเบียน แถบค้นหา ฟิลด์ป้อนข้อความ และสถานการณ์อื่นๆ ที่ต้องการการป้อนข้อมูลจากผู้ใช้ ต่างจากการพัฒนาเว็บที่มีประเภท input แยกต่างหาก (text, email, password, search) ใน React Native รูปแบบทั้งหมดนี้ถูกนำมาใช้ผ่านคอมโพเนนต์ TextInput เดียวกับ props ที่แตกต่างกัน

TextInput รองรับสองโหมดการทำงาน: แบบควบคุม(จัดการผ่านสถานะ React) และไม่ควบคุม (ใช้ ref) ในโหมดควบคุม ค่าของฟิลด์จะถูกเก็บในสถานะของคอมโพเนนต์และอัปเดตผ่าน callback onChangeText วิธีการนี้แนะนำสำหรับแอปพลิเคชันส่วนใหญ่เนื่องจากเป็นแหล่งความจริงเดียวและช่วยให้การตรวจสอบความถูกต้องง่ายขึ้น

ตาม React Native Handling Text Input, 2024 TextInput จะ ปรับ ให้เข้ากับแพลตฟอร์มโดยอัตโนมัติ: บน iOS ใช้ UITextField ดั้งเดิม บน Android — EditText ซึ่งรับประกันการทำงานที่ถูกต้องของการเติมข้อความอัตโนมัติ การแก้ไขอัตโนมัติ และเมนูระบบ (ตัด/คัดลอก/วาง) โดยไม่ต้องกำหนดค่าเพิ่มเติม

คุณสมบัติและ API ของ TextInput

TextInput มีชุด props มากมายสำหรับควบคุมการป้อนข้อมูล ลักษณะที่ปรากฏ และพฤติกรรม props ทั้งหมดแบ่งออกเป็นหลายหมวดหมู่: การจัดการค่า ประเภทคีย์บอร์ด การจัดรูปแบบ เหตุการณ์ และคุณสมบัติเฉพาะแพลตฟอร์ม

props การจัดการค่า

value — ค่าปัจจุบันของฟิลด์ (สำหรับโหมดควบคุม) onChangeText — callback ที่เรียกทุกครั้งที่มีการเปลี่ยนแปลงข้อความ placeholder — ข้อความแนะนำที่แสดงเมื่อฟิลด์ว่าง defaultValue — ค่าเริ่มต้นสำหรับโหมดไม่ควบคุม maxLength จำกัดจำนวนอักขระสูงสุดที่ผู้ใช้สามารถป้อนได้

เหตุการณ์ TextInput

คอมโพเนนต์รองรับ onFocus (ฟิลด์ได้รับโฟกัส), onBlur (ฟิลด์เสียโฟกัส), onSubmitEditing (ผู้ใช้กด Enter/Return), onKeyPress (การกดแป้น) เหตุการณ์ onEndEditing จะถูกเรียกหลังจากเสร็จสิ้นการแก้ไขเมื่อเสียโฟกัส callbacks เหล่านี้ช่วยให้สามารถใช้ตรรกะการตรวจสอบความถูกต้องและการส่งฟอร์มที่ซับซ้อนได้

props เฉพาะแพลตฟอร์ม

บน iOS: clearButtonMode (ปุ่มล้าง), keyboardAppearance (คีย์บอร์ดสว่าง/มืด), returnKeyType (ประเภทปุ่ม Return), enablesReturnKeyAutomatically บน Android: textContentType (การเติมอัตโนมัติ), underlineColorAndroid, inlineImageLeft secureTextEntry ทำงานบนทั้งสองแพลตฟอร์มสำหรับการป้อนรหัสผ่าน

การป้อนแบบควบคุมและไม่ควบคุม

ใน React Native TextInput สามารถทำงานได้สองโหมด ในโหมด ควบคุม React จะจัดการค่าของฟิลด์: คุณส่งค่าจากสถานะและอัปเดตผ่าน onChangeText ในโหมด ไม่ควบคุม React จะเริ่มต้นฟิลด์เท่านั้น และค่าแบบ DOM จะถูกเก็บไว้ภายในคอมโพเนนต์ดั้งเดิม

TextInput แบบควบคุม

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

js
const LoginForm = () => {
    const [email, setEmail] = useState('');
    const [password, setPassword] = useState('');

    return (
        <View>
            <TextInput
                placeholder="Email"
                value={email}
                onChangeText={setEmail}
                keyboardType="email-address"
                autoCapitalize="none"
            />
            <TextInput
                placeholder="Password"
                value={password}
                onChangeText={setPassword}
                secureTextEntry
                maxLength={32}
            />
        </View>
    );
};

ในตัวอย่างนี้ ทั้งสองฟิลด์ใช้โหมด ควบคุม ฟิลด์อีเมลมีประเภทคีย์บอร์ด email-address และปิดการใช้งานการใช้อักษรตัวพิมพ์ใหญ่โดยอัตโนมัติ ฟิลด์รหัสผ่านใช้ secureTextEntry เพื่อซ่อนอักขระที่ป้อนและจำกัดที่ 32 อักขระผ่าน maxLength

TextInput แบบไม่ควบคุม

โหมดไม่ควบคุมเหมาะสำหรับฟิลด์ง่ายๆ ที่ไม่ต้องการ การตรวจสอบ หรือการตอบสนองทันทีต่อการป้อนข้อมูล ค่าของฟิลด์จะถูกเรียกผ่าน ref ในเวลาที่ส่งฟอร์ม

js
const SimpleSearch = () => {
    const inputRef = useRef(null);

    const handleSearch = () => {
        console.log(inputRef.current.value());
    };

    return (
        <TextInput
            ref={inputRef}
            placeholder="Search..."
            onSubmitEditing={handleSearch}
        />
    );
};

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

ประเภทคีย์บอร์ดและคุณสมบัติของแพลตฟอร์ม

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

ค่า keyboardTypeคำอธิบายเมื่อใดควรใช้
defaultคีย์บอร์ดตัวอักษรมาตรฐานชื่อ, นามสกุล, ที่อยู่
numericคีย์บอร์ดตัวเลข (เฉพาะตัวเลข)อายุ, จำนวน, รหัส PIN
email-addressคีย์บอร์ดที่มี @ และ .comฟิลด์อีเมลในฟอร์มลงทะเบียน
phone-padคีย์บอร์ดโทรศัพท์ที่มี + และ #หมายเลขโทรศัพท์
urlคีย์บอร์ดที่มี / และ .comการป้อนที่อยู่เว็บ
decimal-padคีย์บอร์ดตัวเลขที่มีจุดทศนิยมราคา, น้ำหนัก, ขนาด

บน iOS มีประเภทเพิ่มเติม: numbers-and-punctuation, twitter, web-search (พร้อมค้นหาด้วยเสียง) บน Android ยังมี visible-password (แสดงรหัสผ่าน) การเลือก keyboardType ที่ถูกต้องเป็นสิ่งสำคัญของ UX ของแอปพลิเคชันมือถือ

คุณสมบัติของแพลตฟอร์มยังรวมถึง autoCapitalize (การใช้อักษรตัวพิมพ์ใหญ่โดยอัตโนมัติสำหรับคำแรก), autoCorrect (การแก้ไขอัตโนมัติ), spellCheck (การตรวจสอบการสะกด), textContentType (การเติมอัตโนมัติบน iOS) props เหล่านี้ทำงานแตกต่างกันบนแต่ละแพลตฟอร์มและต้องการการทดสอบ

ตัวอย่างการใช้งานจริงกับ TextInput

ลองพิจารณาสองสถานการณ์จริง: ฟิลด์หลายบรรทัดสำหรับป้อนข้อความและฟิลด์ป้อนหมายเลขโทรศัพท์แบบมีมาสก์ ทั้งสองใช้ TextInput กับ props ที่แตกต่างกันเพื่อให้ได้พฤติกรรมที่ต้องการ

ตัวอย่างที่ 1: ฟิลด์หลายบรรทัดสำหรับข้อความ

สำหรับการป้อนข้อความยาว (ความคิดเห็น คำอธิบาย) TextInput จะเปลี่ยนเป็นโหมด หลายบรรทัด ผ่าน prop multiline ในโหมดนี้ ฟิลด์จะขยายในแนวตั้งและรองรับการขึ้นบรรทัดใหม่

js
const MessageInput = ({ onSend }) => {
    const [text, setText] = useState('');

    return (
        <TextInput
            style={styles.input}
            multiline
            numberOfLines={4}
            placeholder="Write a message..."
            value={text}
            onChangeText={setText}
            textAlignVertical="top"
        />
    );
};

prop multiline เปิดใช้งานโหมดหลายบรรทัด numberOfLines กำหนดความสูงเริ่มต้นเป็นบรรทัด textAlignVertical: 'top' จัดแนวข้อความไปที่ด้านบน (โดยค่าเริ่มต้น Android TextInput แบบหลายบรรทัดจะจัดกึ่งกลางข้อความในแนวตั้ง)

ตัวอย่างที่ 2: ฟิลด์จัดรูปแบบหมายเลขโทรศัพท์

สำหรับการป้อน หมายเลขโทรศัพท์ มักต้องการการจัดรูปแบบแบบเรียลไทม์ โดยการรวม onChangeText เข้ากับนิพจน์ปกติ คุณสามารถใช้มาสก์การป้อนข้อมูลได้

js
const PhoneInput = () => {
    const [phone, setPhone] = useState('');

    const formatPhone = (text) => {
        const cleaned = text.replace(/\D/g, '');
        if (cleaned.length <= 11) {
            return cleaned.replace(
                /(\d{1})(\d{3})(\d{3})(\d{2})(\d{2})/,
                '+$1 ($2) $3 $4 $5'
            );
        }
        return cleaned;
    };

    return (
        <TextInput
            keyboardType="phone-pad"
            value={phone}
            onChangeText={(t) => setPhone(formatPhone(t))}
            placeholder="+7 (999) 123 45 67"
            maxLength={20}
        />
    );
};

ฟังก์ชัน formatPhone จะลบอักขระที่ไม่ใช่ตัวเลขทั้งหมดและจัดรูปแบบหมายเลขเป็นรูปแบบมาตรฐานสากล keyboardType: 'phone-pad' แสดงคีย์บอร์ดโทรศัพท์ วิธีการนี้ช่วยปรับปรุง UX สำหรับการป้อนหมายเลขโทรศัพท์และป้องกันข้อผิดพลาดในการจัดรูปแบบ

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

ความแตกต่างระหว่าง value และ defaultValue ใน TextInput คืออะไร?

value ใช้ในโหมดควบคุม — React จัดการข้อความที่แสดงผ่านสถานะ defaultValue ใช้ในโหมดไม่ควบคุม — กำหนดค่าเริ่มต้น และการเปลี่ยนแปลงต่อมาจะถูกเก็บไว้ภายในคอมโพเนนต์

จะซ่อนข้อความที่ป้อนสำหรับรหัสผ่านได้อย่างไร?

ตั้งค่า prop secureTextEntry เป็น true TextInput จะซ่อนอักขระที่ป้อน โดยแทนที่ด้วยจุดหรือเครื่องหมายดอกจัน เพื่อความปลอดภัยเพิ่มเติม คุณสามารถรวมกับ maxLength และ autoCapitalize: 'none'

ทำไม onChangeText ถึงถูกเรียกทุกครั้งที่กดแป้น?

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

จะสร้าง TextInput ที่มีไอคอนอยู่ข้างในได้อย่างไร?

TextInput ไม่รองรับอิลิเมนต์ที่ซ้อนกันโดยตรง วิธีแก้คือสร้างคอนเทนเนอร์ View ด้วย Flexbox ภายในใส่ไอคอนและ TextInput สไตล์ของคอนเทนเนอร์เลียนแบบขอบของฟิลด์ป้อนข้อมูล และ TextInput จะขยายเพื่อเติมเต็มพื้นที่ที่เหลือ

จะลบเส้นใต้ของ TextInput บน Android ได้อย่างไร?

บน Android TextInput มีขอบด้านล่างโดยค่าเริ่มต้น (Material Design) ปิดการใช้งานด้วย underlineColorAndroid: 'transparent' prop นี้ทำงานเฉพาะบน Android และลบเส้นที่มองเห็นได้ใต้ข้อความ

สรุป

  • TextInput — คอมโพเนนต์ React Native หลักสำหรับการป้อนข้อความ คล้ายกับ HTML input ที่มีความสามารถเพิ่มเติม
  • รองรับโหมด ควบคุม (value + onChangeText) และไม่ควบคุม
  • มี ประเภทคีย์บอร์ด (default, numeric, email, phone, url) และ secureTextEntry สำหรับรหัสผ่าน
  • โหมดหลายบรรทัดผ่าน multiline ด้วย numberOfLines และ textAlignVertical
  • เหตุการณ์สำคัญ: onFocus, onBlur, onChangeText, onSubmitEditing, onEndEditing
  • props เฉพาะแพลตฟอร์มรวมถึง textContentType (iOS), underlineColorAndroid (Android)
  • สำหรับมาสก์การป้อนข้อมูล ให้ใช้ onChangeText กับ การจัดรูปแบบ ผ่านนิพจน์ปกติ

เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร

IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ

ปรึกษาโครงการ

อ่านเพิ่มเติม