PL
React - przycisk opcji (radio button) - przykład
3 points
W tym artykule chcielibyśmy pokazać, jak korzystać przycisku opcji (radio button) w Reakcie.
Szybkie rozwiązanie:
xxxxxxxxxx
1
const [gender, setGender] = useState();
2
3
// zmiana obsługi zdarzenia:
4
const handleChange = e => {
5
const target = e.target;
6
if (target.checked) {
7
setGender(target.value);
8
}
9
};
10
11
// element przycisku opcji (tutaj dla wartości "mężczyzna"):
12
<label>
13
<input type="radio" value="mężczyzna" checked={gender == 'mężczyzna'}
14
onChange={handleChange} />
15
<span>Mężczyzna</span>
16
</label>
Poniższy przykład przedstawia komponent funkcyjny form
z dwoma przyciskami opcji reprezentującymi płeć.
Dzięki useState
jesteśmy w stanie przechowywać dane w komponentach state
. W naszym przypadku jest to jedna z dwóch płci: mężczyzna
lub kobieta
. Gdy wystąpi zdarzenie onChange
, nastąpi aktualizacja stanu komponentu przez setGender
.
Wersja JSX:
xxxxxxxxxx
1
// Uwaga: Odkomentuj poniższe linijki podczas pracy z kompilatorem JSX:
2
// import React from react';
3
// import ReactDOM from 'react-dom';
4
5
const Form = props => {
6
const [gender, setGender] = React.useState();
7
const handleChange = e => {
8
const target = e.target;
9
if (target.checked) {
10
setGender(target.value);
11
}
12
};
13
const handleSubmit = e => {
14
e.preventDefault();
15
console.log(gender);
16
};
17
return (
18
<form onSubmit={handleSubmit}>
19
<div>
20
<label>
21
<input type="radio" value="mężczyzna" checked={gender == 'mężczyzna'}
22
onChange={handleChange} />
23
<span>Mężczyzna</span>
24
</label>
25
<label>
26
<input type="radio" value="kobieta" checked={gender == 'kobieta'}
27
onChange={handleChange} />
28
<span>Kobieta</span>
29
</label>
30
</div>
31
<button type="submit">Zatwierdź</button>
32
</form>
33
);
34
};
35
36
const root = document.querySelector('#root');
37
ReactDOM.render(<Form />, root );
Ważna uwaga:
Podczas tworzenia formularzy, React zaleca używanie niekontrolowanych komponentów,
ponieważ przy komponentach kontrolowanych duża liczba elementów wejściowych z obsługą zdarzeńonChange
prowadzi do wielokrotnego renderowania strony, co znacząco zmniejsza wydajność.