type ButtonProps = {
label: string;
disabled?: boolean;
onClick: () => void;
};馃憠 ? optional Props
const Button: React.FC<ButtonProps> = ({ label, onClick }) => (
<button onClick={onClick}>{label}</button>
);馃憠 Use React.FC<Props> or (props: Props)
type CardProps = {
children: React.ReactNode
};馃憠 React.ReactNode always for children.
const [count, setCount] = useState<number>(0);
const [user, setUser] = useState<User | null>(null);馃憠 useState<T>() use Generic-Types.
const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
setValue(e.target.value);
};
const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {
e.preventDefault();
};馃憠 Event-Types: ChangeEvent, MouseEvent, FormEvent.
const inputRef = useRef<HTMLInputElement | null>(null);
useEffect(() => {
inputRef.current?.focus();
}, []);馃憠 Access to DOM-Elements
type User = { id: number; name: string };
const [users, setUsers] = useState<User[]>([]);馃憠 T[] for Arrays
type Preview = Pick<User, "id" | "name">;
type Editable = Partial<User>;
type WithoutEmail = Omit<User, "email">;馃憠 For flexible Props & State
- Props: declare
typeorinterface - Children: Always
React.ReactNode - Events: Use React-Events instead of Standard-Events
- State: Use Generics for
useState<T>() - Utility Types useful Helpers to save time