Atrybuty value w selektorze w React
Załóżmy teraz, że w tagach option
znajdują się atrybuty value:
function App() {
return <div>
<select>
<option value="1">text1</option>
<option value="2">text2</option>
<option value="3">text3</option>
</select>
</div>;
}
W takim przypadku, z powodu obecności atrybutów value,
do stanu trafią właśnie ich wartości,
a nie teksty tagów option. Można się o tym przekonać,
wypisując wynik wyboru do akapitu:
function App() {
const [value, setValue] = useState('');
return <div>
<select value={value} onChange={(event) => setValue(event.target.value)}>
<option value="1">text1</option>
<option value="2">text2</option>
<option value="3">text3</option>
</select>
<p>
Twój wybór: {value}
</p>
</div>;
}
Rozdzielenie tekstu option i jego wartości
może być wygodne: tekst tagu możemy zmieniać
dowolnie, podczas gdy w naszym skrypcie
wynik wyboru będzie przetwarzany na podstawie
wartości atrybutu value, który pozostanie
niezmieniony.
Spójrz na przykład:
function App() {
const [value, setValue] = useState('');
return <div>
<select value={value} onChange={event => setValue(event.target.value)}>
<option value="1">text1</option>
<option value="2">text2</option>
<option value="3">text3</option>
</select>
<p>
{value === '1' && 'wybrałeś pierwszą opcję'}
{value === '2' && 'wybrałeś drugą opcję'}
{value === '3' && 'wybrałeś trzecią opcję'}
</p>
</div>;
}
Teraz, jeśli zmienimy teksty tagów option,
działanie skryptu nie zostanie zakłócone - ponieważ jest ono
powiązane z wartością atrybutu value.
Za pomocą listy rozwijanej zaproponuj użytkownikowi
wybór grupy wiekowej, do której należy:
od 0 do 12 lat, od 13
do 17, od 18 do 25,
lub powyżej 25 lat.