Có thể không đúng lắm nhưng bạn hiểu như thế này dễ hiểu hơn.
Properties dùng để bổ sung thông tin cho component
State dùng để nắm giữ thông tin của component.
Để dễ hiểu hãy xem ví dụ Person Component. Để biến Component này là ai, thì ta bổ sung thêm thông qua properties bao gồm Tên, Tuổi, Địa chỉ.
class Person extends Component {
render() {
const { name, age, addr } = this.props;
return (
<div>
<div>Name: {name}</div>
<div>Age: {age}</div>
<div>Address: {addr}</div>
</div>
);
}
}
Vì sao tên, tuổi, địa chỉ là ko thuộc về component này? Vì tên thì do phụ mẫu đặt, quản lý bởi Bộ Công an. Tuổi thì do trời đất quy định, cứ qua một năm là tự tăng, chứ bản thân cũng ko thể thích mà tự tăng tuổi được. Địa chỉ do sở nhà đất cấp. Tóm lại những thông tin trên là do một bên khác bổ sung vào, thì ta cho nó qua properties. Vì vậy properties không thay đổi được. Vì mình đâu có quản lý đâu mà thay đổi được! Muốn thay đổi là phải lên bộ này bộ kia mới được.
State là trạng thái, vậy một Person có state/ gì? Xem ví dụ dưới.
class Person extends Component {
constructor(props) {
super(props);
this.state = {
activity: 'reading',
emotion: 'confusing',
}
}
understand = () => {
this.setState({ activity: 'thank you', emotion: 'happy' });
}
render() {
const { name, age, addr } = this.props;
const { activity, emotion } = this.state;
return (
<div>
<div>Name: {name}</div>
<div>Age: {age}</div>
<div>Address: {addr}</div>
<div>Activity: {activity}</div>
<div>Emotion: {emotion}</div>
<button onClick={this.understand}>I understand now</button>
</div>
);
}
}
Tại sao activity, emotion lại nằm trong trạng thái? Đơn giản vì nó thuộc về con người của bạn. Bạn thích thì bạn thay đổi. Không thì thì thôi. Giống như giả sử như bạn đọc xong reply của mình, hên thì cách diễn đạt của mình dễ hiểu thì bạn tiếp thu được rồi cảm ơn mình cái. Không thì thôi. Nó do bạn quyết định và là của bạn, do bạn sở hữu nên nằm trong state. Và cũng vì do của bạn, nên bạn thích sửa là sửa, xóa là xóa. Toàn quyền
Tuy nhiên khi học nữa. Bạn sẽ thấy quản lý state khá là khó khăn và có hiệu xuất không được tốt (vì sao thì code nhiều bạn sẽ thấy :v). Nên ngta ra đời redux. Một thư viện hỗ trợ quản lý state cho bạn. Thì khi đó mọi component đều không có states và rất cực kỳ hạn chế dùng states. Khi này có thể nói dễ hiểu hơn là Person thành Robot ấy. Nhận emotion, activity gì đều từ tổng tư lệnh redux hết. Thì một con robot bao giờ cũng dễ điều khiển hơn 1 con người. Nên ngta rất ưu tiên tạo ra những component như những Robot component.