Состояние компонента (state) — это объект, в котором хранится необходимая компоненту информация, пока он существует. Важно, что состояние контролируется только самим компонентом, другие компоненты не имеют к нему доступа, если только не передать данные из состояния через пропы дочерним компонентам. Состояние может меняться, при этом происходит перерисовка компонента.
Состояние в компоненте не является обязательным, если в компоненте используется состояние, то он называется Statefull Component, если же хранить состояние в проекте не требуется — Stateless Component. В большом проекте рекомендуется снижать количество Statefull Component к минимуму.
Пример компонента, хранящего состояние:
class Login extends React.Component {
constructor(props) {
super(props);
this.state = {
isLogin: false
};
}
render() {
return this.state.isLogin
? <div className="message">Приветствуем Вас на сайте!</div>
: <button>Войти</button>
}
}
Начальное состояние компонента задается в конструкторе (задание начального состояния возможно и без конструктора в более коротком синтаксисе). Менять состояние нужно при помощи метода setState, чтобы после изменения состояния выполнилась перерисовка компонента.
При создании состояния нужно придерживаться принципа, что оно должно быть максимально простым: чем меньше уровней вложенности, тем удобнее с ним работать.
Пример неоптимальной структуры состояния:
{
categories: [
{
id: 1,
name: 'Бакалея',
products: []
},
{
id: 2,
name: 'Овощи и фрукты',
products: [
{ id: 1, name: 'Апельсин' },
{ id: 2, name: 'Морковь' },
]
},
{
id: 3,
name: 'Мясо',
products: [
{ id: 3, name: 'Корейка' },
]
}
]
}
Пример оптимальной структуры:
{
categories: [
{ id: 1, name: 'Бакалея' },
{ id: 2, name: 'Овощи и фрукты' },
{ id: 3, name: 'Мясо' },
],
products: [
{ id: 1, name: 'Апельсин', categoryId: 2 },
{ id: 2, name: 'Морковь', categoryId: 2 },
{ id: 3, name: 'Корейка', categoryId: 3 },
]
}Новые статьи: