--- id: 5a24c314108439a4d4036173 title: Встановлення State за допомогою this.setState challengeType: 6 forumTopicId: 301412 dashedName: set-state-with-this-setstate --- # --description-- В попередніх завданнях було розглянуто компонент `state` та як ініціалізувати стан в `constructor`. Також існує спосіб змінити стан компонента `state`. React надає метод для оновлення компоненту `state` під назвою `setState`. Ви викликаєте метод `setState` у своєму класі компонентів наступним чином: `this.setState()`, передаючи об'єкт з парами ключ-значення. Ключі - це властивості стану, а значення - оновлені дані стану. Наприклад, якби ми зберігали `username` в стані та хотіли б його оновити, то це мало б наступний вигляд: ```jsx this.setState({ username: 'Lewis' }); ``` React очікує, що ви ніколи не будете змінювати `state` безпосередньо, натомість завжди будете використовувати `this.setState()`, коли відбуваються зміни стану. Також зверніть увагу на те, що React може пакетно оновлювати кілька станів, щоб покращити продуктивність. Це означає, що оновлення стану за допомогою методу `setState` можуть бути асинхронними. Існує альтернативний синтаксис для методу `setState`, який дозволяє обійти цю проблему. Він використовується рідко, але добре мати його на увазі! Для отримання додаткової інформації зверніться до [React документації](https://reactjs.org/docs/state-and-lifecycle.html#state-updates-may-be-asynchronous). # --instructions-- В редакторі коду є елемент `button`, який має обробник `onClick()`. Цей обробник спрацьовує, коли `button` отримує подію кліку в браузері та запускає метод `handleClick`, визначений в `MyComponent`. В межах методу `handleClick` оновіть компонент `state`, використовуючи `this.setState()`. Встановіть властивість `name` у `state`, щоб вона дорівнювала рядку `React Rocks!`. Натисніть на кнопку та перегляньте оновлення візуалізованого стану. Не хвилюйтесь, якщо на цьому етапі ви не до кінця розумієте, як працює код обробника кліку. Це буде розглянуто в наступних завданнях. # --hints-- Стан `MyComponent` має ініціалізуватися за допомогою пари ключ-значення `{ name: Initial State }`. ```js assert( Enzyme.mount(React.createElement(MyComponent)).state('name') === 'Initial State' ); ``` `MyComponent` має виводити елемент заголовку `h1`. ```js assert(Enzyme.mount(React.createElement(MyComponent)).find('h1').length === 1); ``` У заголовку `h1` має бути текст, переданий у стані компонента. ```js async () => { const waitForIt = (fn) => new Promise((resolve, reject) => setTimeout(() => resolve(fn()), 250)); const mockedComponent = Enzyme.mount(React.createElement(MyComponent)); const first = () => { mockedComponent.setState({ name: 'TestName' }); return waitForIt(() => mockedComponent.html()); }; const firstValue = await first(); assert(/