Как использовать state в React
Что такое state?
state – это объект JavaScript, который хранит динамические данные компонента и определяет его поведение. Поскольку state является динамическим, оно позволяет компоненту отслеживать изменение информации в промежутках между визуализацией и делать ее динамической и интерактивной.
Добавлении state обычно делается для компонента класса или функционального компонента.
Что такое компонент класса?
Компонент класса – это просто более функциональный способ определения компонента React. Он также действует как функция, которая получает реквизиты (параметры в реакции), но эта функция также рассматривает частный внутренний state как дополнительный ввод, который контролирует возвращаемый JSX (JavaScript XML). Интересный факт о компоненте класса заключается в том, что он требует от вас расширения от React.Component и создания функции рендеринга, которая возвращает элемент React.
Компоненты React имеют встроенный объект state. Объект state – это место, где вы храните значения свойств, принадлежащих компоненту. Когда объект state изменяется, компонент перерисовывается.
Примеры
Создание объекта state
Объект state инициализируется в нашем конструкторе:
class Car extends React.Component {
constructor(props) {
super(props);
this.state = {brand: "Ford"};
}
render() {
return (
<div>
<h1>My Car</h1>
</div>
);
}
}
Наш объект state может содержать сколько угодно свойств:
Укажите все свойства, которые нужны вашему компоненту:
class Car extends React.Component {
constructor(props) {
super(props);
this.state = {
brand: "Ford",
model: "Mustang",
color: "red",
year: 1964
};
}
render() {
return (
<div>
<h1>My Car</h1>
</div>
);
}
}
Использование объекта state
Пытаясь получить доступ к свойствам state в нашем компоненте, мы обращаемся к объекту state в любом месте компонента, используя синтаксис this.state.propertyname.
Пример
class Car extends React.Component {
constructor(props) {
super(props);
this.state = {
brand: "Ford",
model: "Mustang",
color: "red",
year: 1964
};
}
render() {
return (
<div>
<h1>My {this.state.brand}</h1>
<p>
It is a {this.state.color}
{this.state.model}
from {this.state.year}.
</p>
</div>
);
}
}
Изменение объекта state
Чтобы изменить значение в объекте state, используйте метод this.setState (). Когда значение в объекте state изменяется, компонент будет повторно визуализирован, что означает, что вывод изменится в соответствии с новым значением.
Пример
Для этого нам понадобится дескриптор onClick even для кнопки, чтобы обновлять состояние при нажатии ее пользователем. Обработка событий с помощью элементов React очень похожа на обработку событий в элементах DOM. Однако есть некоторые различия в синтаксисе:
- События React именуются с использованием camelCase, а не строчных букв.
- С JSX вы передаете функцию в качестве обработчика события, а не строку.
Например, HTML:
<button onclick="activateLasers()">
Activate Lasers
</button>
В React:
<button onClick={activateLasers}>
Activate Lasers
</button>
Продолжая наш пример, мы добавим кнопку с событием onClick, которое изменит свойство цвета:
class Car extends React.Component {
constructor(props) {
super(props);
this.state = {
brand: "Ford",
model: "Mustang",
color: "red",
year: 1964
};
}
changeColor = () => {
this.setState({color: "blue"});
}
render() {
return (
<div>
<h1>My {this.state.brand}</h1>
<p>
It is a {this.state.color}
{this.state.model}
from {this.state.year}.
</p>
<button
type="button"
onClick={this.changeColor}
>Change color</button>
</div>
);
}
}
Примечание. Всегда используйте метод setState () для изменения объекта state, это гарантирует, что компонент знает, что он был обновлен, и вызывает метод render () и другие методы.
Что такое функциональная составляющая?
С другой стороны, функциональный компонент – это простая функция JavaScript, которая принимает реквизиты в качестве аргумента и возвращает элемент React. Она работает почти как компонент класса, только здесь у нас нет ключевого слова this, которое говорило бы, что мы получим что-то вроде следующего кода:
export default function Car() {
const [state, setState] = React.useState({
brand: "Ford",
model: "Mustang",
color: "red",
year: 1964
});
const changeColor = () => {
setState({ color: "blue" });
};
return (
<div>
<h1>My {state.brand}</h1>
<p>
It is a {state.color}
{state.model}
from {state.year}.
</p>
<button type="button" onClick={changeColor}>
Change color
</button>
</div>
);
}
Мы можем установить state только с помощью его метода setState