⊗jsrtPmFmsII 56 of 112 menu

Làm việc với input trong React

Làm việc với input trong React được thực hiện thông qua state. Mỗi input được gán một state riêng, chứa value của input.

Hãy xem một ví dụ. Giả sử chúng ta có một input:

function App() { return <div> <input /> </div>; }

Giả sử chúng ta cũng có một state:

function App() { const [value, setValue] = useState('text'); return <div> <input /> </div>; }

Hãy liên kết state của chúng ta với thuộc tính value của input:

function App() { const [value, setValue] = useState('text'); return <div> <input value={value} /> </div>; }

Trong trường hợp này, kết quả sẽ là khi state thay đổi, văn bản của input cũng sẽ thay đổi một cách reactive.

Tuy nhiên, điều này tạo ra một hiệu ứng phụ thú vị: bây giờ khi chạy mã trong trình duyệt, không thể thay đổi văn bản trong input! Tại sao: bởi vì khi nhập văn bản vào input, state value không thay đổi, do đó, văn bản trong input cũng không nên thay đổi.

Hãy tự thử. Sao chép mã của tôi và chạy trên máy của bạn. Thử thay đổi văn bản trong input - bạn sẽ không làm được gì. Mở console của trình duyệt - bạn sẽ thấy một cảnh báo của React. Cảnh báo này chỉ cho chúng ta rằng chúng ta đã liên kết state với input, nhưng bằng cách đó đã khóa input.

Hãy làm sao để chúng ta có thể nhập văn bản vào input của mình. Để làm điều này, cần phải đảm bảo rằng khi nhập, state của chúng ta sẽ thay đổi thành giá trị hiện tại của input.

Trước hết, cần gắn sự kiện onChange vào input:

function App() { const [value, setValue] = useState('text'); return <div> <input value={value} onChange={handleChange} /> </div>; }

Sự kiện này trong React hoạt động khác so với JS thuần. Trong React, nó kích hoạt ngay lập tức khi input thay đổi. Tức là khi nhập hoặc xóa ký tự.

Bây giờ hãy thêm trình xử lý cho sự kiện của chúng ta:

function App() { const [value, setValue] = useState('text'); function handleChange() { } return <div> <input value={value} onChange={handleChange} /> </div>; }

Trong trình xử lý này, chúng ta phải đọc văn bản hiện tại của input và đặt nó vào state bằng cách sử dụng hàm setValue.

Vấn đề là this của hàm này sẽ không trỏ đến input của chúng ta - đó là đặc điểm của React. Để nhận được phần tử nơi sự kiện xảy ra, chúng ta cần sử dụng event.target:

function App() { const [value, setValue] = useState('text'); function handleChange(event) { console.log(event.target); // tham chiếu đến phần tử DOM của input } return <div> <input value={value} onChange={handleChange} /> </div>; }

Hãy xuất văn bản hiện tại của input bằng cách sử dụng event.target:

function App() { const [value, setValue] = useState('text'); function handleChange(event) { console.log(event.target.value); // văn bản hiện tại của input } return <div> <input value={value} onChange={handleChange} /> </div>; }

Và bây giờ hãy ghi văn bản của input vào state của chúng ta:

function App() { const [value, setValue] = useState('text'); function handleChange(event) { setValue(event.target.value); } return <div> <input value={value} onChange={handleChange} /> </div>; }

Bây giờ chúng ta có thể nhập văn bản vào input. Đồng thời state value sẽ luôn chứa văn bản hiện tại của input.

Chúng ta có thể dễ dàng xác minh điều này. Hãy xuất nội dung văn bản của chúng ta vào một đoạn văn. Trong trường hợp này, khi nhập văn bản vào input, văn bản đã nhập sẽ tự động xuất hiện trong đoạn văn:

function App() { const [value, setValue] = useState(''); function handleChange(event) { setValue(event.target.value); } return <div> <input value={value} onChange={handleChange} /> <p>text: {value}</p> </div>; }

Chúng ta có thể viết lại thành một phiên bản gọn hơn với hàm mũi tên ẩn danh:

function App() { const [value, setValue] = useState(''); return <div> <input value={value} onChange={event => setValue(event.target.value)} /> <p>text: {value}</p> </div>; }

Vì vậy, để bất kỳ input nào hoạt động, chúng ta cần làm như sau: tạo một state cho input đó, liên kết state với thuộc tính value của input, gắn sự kiện onChange vào input, trong trình xử lý sự kiện, thay đổi state của input thành văn bản của nó.

Các thao tác này sẽ cần được thực hiện với từng input. Tức là, nếu bạn có hai input, thì bạn sẽ có hai state và hai hàm xử lý sự kiện onChange.

Tạo hai input. Hãy để văn bản của input đầu tiên được xuất ra đoạn văn thứ nhất, còn văn bản của input thứ hai - ra đoạn văn thứ hai.

Tiếng Việt
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbek
Chúng tôi sử dụng cookie để vận hành trang web, phân tích và cá nhân hóa. Việc xử lý dữ liệu được thực hiện tuân theo Chính sách bảo mật.
chấp nhận tất cả tùy chỉnh từ chối