103 lines
3.6 KiB
Markdown
103 lines
3.6 KiB
Markdown
---
|
||
id: 5a24c314108439a4d4036163
|
||
title: Створення компоненту React
|
||
challengeType: 6
|
||
forumTopicId: 301386
|
||
dashedName: create-a-react-component
|
||
---
|
||
|
||
# --description--
|
||
|
||
Інший спосіб, щоб визначити React компонент - за допомогою синтаксису ES6 `class`. В наступному прикладі `Kitten` розширює `React.Component`:
|
||
|
||
```jsx
|
||
class Kitten extends React.Component {
|
||
constructor(props) {
|
||
super(props);
|
||
}
|
||
|
||
render() {
|
||
return (
|
||
<h1>Hi</h1>
|
||
);
|
||
}
|
||
}
|
||
```
|
||
|
||
Це створює клас ES6 `Kitten`, який розширює клас `React.Component`. Отож, клас `Kitten` тепер має доступ до багатьох корисних функцій React, як наприклад, локальний стан та пастки життєвого циклу. Не хвилюйтеся, якщо ви ще не знайомі з цими термінами, вони будуть детально розкриті у наступних завданнях. Також, зверніть увагу на те, що клас `Kitten` має `constructor` визначений через `super()`. Він використовує `super()`, щоб викликати конструктора батьківського класу, в цьому випадку `React.Component`. Конструктор - це спеціальний метод, який використовується під час ініціалізації об'єктів, які було створено за допомогою ключового слова `class`. Найкраща практика для виклику компоненту `constructor` - використати `super`, а потім провести `props` до обидвох. Це дозволяє впевнитись, що компонент ініціалізовано належним чином. Поки що відомо, що це - стандарт для цього коду. Скоро ви побачите інше використання конструктора, а також `props`.
|
||
|
||
# --instructions--
|
||
|
||
`MyComponent` визначається в редакторі коду за допомогою синтаксису класів. Завершіть запис методу `render`, щоб він повернув елемент `div`, який містить в собі `h1` з текстом `Hello React!`.
|
||
|
||
# --hints--
|
||
|
||
React компонент повинен повертати `div` елемент.
|
||
|
||
```js
|
||
assert(Enzyme.shallow(React.createElement(MyComponent)).type() === 'div');
|
||
```
|
||
|
||
Повернений `div` повинен відображати заголовок `h1` в собі.
|
||
|
||
```js
|
||
assert(
|
||
/<div><h1>.*<\/h1><\/div>/.test(
|
||
Enzyme.shallow(React.createElement(MyComponent)).html()
|
||
)
|
||
);
|
||
```
|
||
|
||
Заголовок `h1` повинен містити в собі рядок `Hello React!`.
|
||
|
||
```js
|
||
assert(
|
||
Enzyme.shallow(React.createElement(MyComponent)).html() ===
|
||
'<div><h1>Hello React!</h1></div>'
|
||
);
|
||
```
|
||
|
||
# --seed--
|
||
|
||
## --after-user-code--
|
||
|
||
```jsx
|
||
ReactDOM.render(<MyComponent />, document.getElementById('root'))
|
||
```
|
||
|
||
## --seed-contents--
|
||
|
||
```jsx
|
||
class MyComponent extends React.Component {
|
||
constructor(props) {
|
||
super(props);
|
||
}
|
||
render() {
|
||
// Change code below this line
|
||
|
||
|
||
|
||
// Change code above this line
|
||
}
|
||
};
|
||
```
|
||
|
||
# --solutions--
|
||
|
||
```jsx
|
||
class MyComponent extends React.Component {
|
||
constructor(props) {
|
||
super(props);
|
||
}
|
||
render() {
|
||
// Change code below this line
|
||
return (
|
||
<div>
|
||
<h1>Hello React!</h1>
|
||
</div>
|
||
);
|
||
// Change code above this line
|
||
}
|
||
};
|
||
```
|