Cả hai đều là dữ liệu điều khiển những gì component render, nhưng khác nhau về quyền sở hữu và khả năng thay đổi:
- Props (properties): dữ liệu cha truyền xuống con. Với chính component nhận, props là chỉ đọc (read-only) — không được sửa. Luồng dữ liệu một chiều, từ trên xuống. Đổi giá trị props là việc của cha.
- State: dữ liệu nội bộ do chính component quản lý qua
useState/useReducer. Thay đổi được bằng hàm setter, và mỗi lần đổi sẽ kích hoạt re-render.
Điểm mấu chốt:
- Cùng một dữ liệu: nếu component tự sở hữu và thay đổi → state; nếu nhận từ ngoài → props.
- Muốn con "đổi" dữ liệu của cha: cha truyền hàm callback qua props, con gọi để yêu cầu cha cập nhật state (lifting state up).
- Đừng sao chép props vào state rồi để hai bên lệch nhau — chỉ làm vậy khi thật sự cần giá trị khởi tạo độc lập.