Datentypen mit useState()
Der useState()
-Hook ist ein zentrales Element in der Zustandsverwaltung von React-Funktionskomponenten. Dabei spielt der richtige Umgang mit verschiedenen Datentypen eine wichtige Rolle. In diesem Artikel wird gezeigt, welche Datentypen mit useState()
verwendet werden können, wie React intern damit umgeht und welche Besonderheiten bei Referenztypen wie Objekten oder Arrays beachtet werden sollten.
Inhaltsverzeichnis
Datentypen
Sehr oft handelt es sich bei Zustandswerten um Zeichenketten (String) und Zahlen (Number). Man ist allerdings nicht auf diese Datentypen beschränkt.
Man kann jeden validen JavaScript-Datentyp verwenden.
Das bedeutet, dass man nicht nur Zeichenketten oder Zahlen, sondern auch komplexere Typen wie Arrays oder Objekte verwenden kann. React erlaubt hier die Verwendung auch komplexer Typen als Zustandswerte.
Es ist sogar zur Laufzeit problemlos möglich den Datentyp vollständig von z.B. String nach Number zu wechseln. Ob es eine gute Praxis ist, steht auf einem anderen Blatt geschrieben, technisch ist es in React allerdings möglich.
Beispiele
Zeichenkette (String)
import { useState } from 'react';
const StateExample = () => {
const [enteredEmail, setEnteredEmail] = useState('');
};
export default StateExample;
Zahlen (Number)
import { useState } from 'react';
const StateExample = () => {
const [counter, setCounter] = useState(0);
};
export default StateExample;
Boolean
import { useState } from 'react';
const BooleanExample = () => {
const [isActive, setIsActive] = useState(false);
};
export default BooleanExample;
Listen (Arrays)
import { useState } from 'react';
const ArrayExample = () => {
const [enteredItems, setEnteredItems] = useState([]);
const addItemHandler = () => {
const time = new Date().getTime();
setEnteredItems(prevItems => [...prevItems, time]);
};
return (
<>
{enteredItems.length > 0 && (
<ul>
{enteredItems.map((todo, idx) => (
<li key={idx}>{todo}</li>
))}
</ul>
)}
<button onClick={addItemHandler}>
Add item
</button>
</>
);
};
export default ArrayExample;
Objekte (Object)
import { useState } from 'react';
const ObjectExample = () => {
const initPersonData = {
name: 'John',
age: 20,
job: 'Designer',
salary: 30000
};
const [personData, setPersonData] = useState(initPersonData);
const updatePersonDataHandler = () => {
setPersonData(currentPersonData => ({
...currentPersonData,
job: 'Developer',
salary: 50000
}));
};
return (
<>
<div className="person_data">
<p>Name: {personData.name}</p>
<p>Age: {personData.age}</p>
<p>Job: {personData.job}</p>
<p>Salary: {personData.salary}</p>
</div>
<button onClick={updatePersonDataHandler}>
Update data
</button>
</>
);
};
export default ObjectExample;