Skip to content

Latest commit

History

History
96 lines (75 loc) 路 1.68 KB

File metadata and controls

96 lines (75 loc) 路 1.68 KB

馃摌 React + TypeScript Cheat-Sheet

馃敼 Props

type ButtonProps = { 
  label: string; 
  disabled?: boolean; 
  onClick: () => void; 
};

馃憠 ? optional Props


馃敼 Component

const Button: React.FC<ButtonProps> = ({ label, onClick }) => (
  <button onClick={onClick}>{label}</button>
);

馃憠 Use React.FC<Props> or (props: Props)


馃敼 Children

type CardProps = { 
  children: React.ReactNode 
};

馃憠 React.ReactNode always for children.


馃敼 State

const [count, setCount] = useState<number>(0);
const [user, setUser] = useState<User | null>(null);

馃憠 useState<T>() use Generic-Types.


馃敼 Events

const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
  setValue(e.target.value);
};

const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {
  e.preventDefault();
};

馃憠 Event-Types: ChangeEvent, MouseEvent, FormEvent.


馃敼 Refs

const inputRef = useRef<HTMLInputElement | null>(null);

useEffect(() => {
  inputRef.current?.focus();
}, []);

馃憠 Access to DOM-Elements


馃敼 Lists & Arrays

type User = { id: number; name: string };

const [users, setUsers] = useState<User[]>([]);

馃憠 T[] for Arrays


馃敼 Utility Types

type Preview = Pick<User, "id" | "name">;
type Editable = Partial<User>;
type WithoutEmail = Omit<User, "email">;

馃憠 For flexible Props & State


馃攽 Faustregeln

  • Props: declare type or interface
  • 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