НАЙКРАЩИЙ САЙТ ДЛЯ ВЕБ-РОЗРОБНИКІВ
React. W3Schools українською. Уроки для початківців

En

React Форми


Як і в HTML, React використовує форми, щоб дозволити користувачам взаємодіяти з вебсторінкою.


Додавання форм у React

Ви додаєте форму за допомогою React, як і будь-який інший елемент:

Приклад:

Add a form that allows users to enter their name:

function MyForm() {
return (
<form>
  <label>Введіть ім’я:
    <input type="text" />
  </label>
</form>
)
}
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<MyForm />);

Виконати приклад »

Це працюватиме як зазвичай, форму буде надіслано, а сторінка оновиться.

Але загалом це не те, чого ми хочемо мати в React.

Ми хочемо запобігти такій поведінці за умовчанням і дозволити React контролювати форму.


Обробка форм

Обробка форм стосується того, як ви обробляєте дані, коли вони змінюють значення або надсилаються.

У HTML дані форми зазвичай обробляються DOM.

У React дані форми зазвичай обробляються компонентами.

Коли дані обробляються компонентами, усі дані зберігаються в стані компонента.

Ви можете контролювати зміни, додаючи обробники подій в атрибут onChange.

Ми можемо використовувати хук useState, щоб відстежувати кожне вхідне значення та надавати "єдине джерело правди" для всієї програми.

Перегляньте розділ Хуки React, щоб дізнатися більше про хуки.

Приклад:

Використовуйте хук useState для керування введенням:

import { useState } from 'react';
import ReactDOM from 'react-dom/client';

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

return (
<form>
  <label>Введіть ім’я:
    <input
      type="text"
      value={name}
      onChange={(e) => setName(e.target.value)}
    />
  </label>
</form>
)
}

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<MyForm />);

Виконати приклад »


Надсилання форм

Ви можете керувати дією надсилання, додавши обробник події в атрибут onSubmit для <form>:

Приклад:

Додайте кнопку надсилання та обробник події в атрибут onSubmit:

import { useState } from 'react';
import ReactDOM from 'react-dom/client';

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

const handleSubmit = (event) => {
event.preventDefault();
alert(`Ім’я, яке ви ввели, було: ${name}`)
}

return (
<form onSubmit={handleSubmit}>
  <label>Введіть ім’я:
    <input
      type="text"
      value={name}
      onChange={(e) => setName(e.target.value)}
    />
  </label>
  <input type="submit" />
</form>
)
}

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<MyForm />);

Виконати приклад »


Кілька полів введення

Ви можете керувати значеннями кількох полів введення, додавши атрибут name до кожного елемента.

Ми ініціалізуємо наш стан порожнім об’єктом.

Щоб отримати доступ до полів в обробнику подій, використовуйте event.target.name і event.target.value синтаксис.

Щоб оновити стан, використовуйте квадратні дужки [нотація] навколо імені властивості.

Приклад:

Напишіть форму з двома полями введення:

import { useState } from 'react';
import ReactDOM from 'react-dom/client';

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>Введіть ім’я:
  <input
    type="text"
    name="username"
    value={inputs.username || ""}
    onChange={handleChange}
  />
  </label>
  <label>Введіть свій вік:
    <input
      type="number"
      name="age"
      value={inputs.age || ""}
      onChange={handleChange}
    />
    </label>
    <input type="submit" />
</form>
)
}

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<MyForm />);

Виконати приклад »

Примітка: Ми використовуємо ту саму функцію обробника подій для обох полів введення, ми могли б написати один обробник подій для кожного, але це дає нам набагато чистіший код і є кращим способом у React.


Текстове поле / Textarea

Елемент textarea в React трохи відрізняється від звичайного HTML.

У HTML значенням текстового поля був текст між початковим тегом <textarea> і кінцевим тегом </textarea>.

<textarea>
Вміст текстового поля.
</textarea>

У React значення текстового поля поміщається в атрибут value. Ми будемо використовувати хук useState для керування значенням текстового поля:

Приклад:

Просте текстове поле з деяким вмістом:

import { useState } from 'react';
import ReactDOM from 'react-dom/client';

function MyForm() {
const [textarea, setTextarea] = useState(
"Вміст текстового поля міститься в атрибуті value"
);

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

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

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<MyForm />);

Виконати приклад »


Вибрати

Спадний список або поле вибору в 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 може обробляти всі введені елементи таким же чином.