Nr.1 Flashcards

1
Q

В проекте React мы добавляем ссылку на 2 файла. Один из них - react.js, другой - react-dom.js. Почему нам нужно включить два файла, а не один?

A

Файл React.js - это небольшой файл, который выполняет работу по созданию компонентов. Поэтому он используется как в веб-проектах, так и в проектах React-Native. В Интернете компоненты затем отображаются в браузере с помощью response-dom.js. Таким образом, 2 файла разделены для возможности повторного использования.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Что такое чистая функция?

A

Чистая функция не изменяет свой ввод. Он всегда возвращает одно и то же значение для одного и того же ввода. В React компонент должен быть чистой функцией по отношению к своим свойствам. Это означает, что для конкретного пропса визуализированный компонент всегда будет одинаковым.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

setState() - синхронный или асинхронный метод?

A

Метод setState() - асинхронный.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Как мы можем условно отрендерить JSX в React?

A
  1. Мы не можем использовать if…else внутри JSX. Но мы можем динамически возвращать элементы React в зависимости от условия.
if(isLoggedIn) {
  return 
} else {
  return 
}
  1. Другой способ - использовать логические операторы для реализации встроенного if.

<div>
{count > 10 && }
</div>

  1. Мы можем реализовать встроенный if…else с помощью тернарного оператора JavaScript.

{ isLoggedIn ? : }

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Если компоненту ничего не нужно отрисовывать, что мы можем сделать?

A

Метод render() или функциональный компонент может возвращать значение null.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Почему мы предоставляем ключевой атрибут для списка объектов?

A

Ключи помогают React понять, какие элементы были изменены, добавлены или удалены.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Что такое контролируемый компонент в React?

A

В контролируемом компоненте значение элемента формы ввода контролируется React.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Что такое React?

A

React — это библиотека JavaScript с открытым исходным кодом, созданная Facebook для разработки сложных интерактивных пользовательских интерфейсов в веб- и мобильных приложениях. Основная цель React — создание компонентов пользовательского интерфейса

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Что такое Виртуальная DOM?

A

виртуальная модель DOM представляет собой дерево узлов, в котором элементы, их атрибуты и содержимое перечислены в виде объектов и свойств.

Всякий раз, когда что-либо изменяется, весь пользовательский интерфейс сначала ре-рендерится в виртуальном представлении DOM. Вычисляется разница между предыдущим виртуальным представлением DOM и текущим. “Настоящий” DOM обновляется с учетом того, что действительно изменилось. Обновление виртуального DOM происходит очень быстро по сравнению с ре-рендерингом в реальном браузере. Следовательно, производительность улучшается.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Какие существуют фазы жизненного цикла компонентов React?

A

Существует четыре различных этапа жизненного цикла компонента React:

Инициализация: На этом этапе компонент React готовит установку начального состояния и параметров по умолчанию.

Монтирование: Компонент React готов для монтирования в DOM браузера. Этот этап охватывает методы жизненного цикла componentWillMount и componentDidMount.

Обновление: На этом этапе компонент обновляется двумя способами, отправляя новые свойства и обновляя состояние. Этот этап охватывает методы жизненного цикла shouldComponentUpdate, componentWillUpdate и componentDidUpdate.

Размонтирование: На этом последнем этапе компонент не нужен и отключается из DOM браузера. Этот этап включает метод жизненного цикла componentWillUnmount.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Как работает React?

A

React создает виртуальную DOM. Когда состояние изменяется в компоненте, он сначала запускает алгоритм «различий», который определяет, что изменилось в виртуальной DOM. Вторым шагом является согласование, при котором обновляется DOM с результатами сравнения отличий.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Какая разница между Элементом и Компонентом в React?

A

Проще говоря, элемент в React описывает то, что вы хотите видеть на экране. Если точнее, то элемент в React является объектным представлением некого пользовательского интерфейса.
Компонент в React является функцией или классом, который при необходимости принимает данные и возвращает элемент (обычно в виде JSX, который преобразуется в вызов createElement)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Когда вам использовать Class Component вместо Functional Component?

A

Если ваш компонент имеет состояние или содержит используемые методы значимые для компонента, то используйте Class component. В других случаях используйте Functional component.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

В чем разница между createElement и cloneElement?

A

createElement мы получаем из JSX и его React использует для создания элементов (объектное представление некоторого интерфейса). cloneElement используется для клонирования элемента и отправки ему новых параметров.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

У нас есть фрагмент кода JSX:

const content = (
  <div>
    <h1>Backbencher</h1>
  </div>
);

Напишите чистый код JavaScript после преобразования JSX в JavaScript.

A
const content = React.createElement(
  "div",
  {},
  React.createElement("h1", {}, "Backbencher")
);
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Опишите аргументы метода React.createElement().

A

React.createElement() принимает три аргумента: createElement(tag, attributes, children)

Первый параметр - это тег или компонент для визуализации.
Второй параметр принимает объект. Пара ключ-значение объекта формирует список атрибутов тега.
Третий параметр может быть строкой или другим компонентом, который должен быть вложен в текущий тег или компонент. Вот пример.

React.createElement(“div”, {id: “hello”}, “Backbencher”) становится -

<div>Backbencher</div>

17
Q

Что такое JSX? В чем преимущество его использования?

A

JSX позволяет создавать HTML-элементы прямо в JavaScript и помещать их в DOM без использования таких методов, как createElement() или appendChild(). JSX преобразует HTML-теги в элементы React. React использует JSX для шаблонизации вместо обычного JavaScript. Использовать JSX не обязательно, однако он предоставляет несколько преимуществ:

Он быстрее благодаря оптимизации во время компиляции кода в JavaScript.
Он также является “типобезопасным”, большинство ошибок перехватываются во время компиляции.
Он позволяет легче и быстрее создавать шаблоны.

JSX - это выражения JavaScript

JSX-выражения являются валидными JavaScript-выражениями. После компиляции, они становятся обычными объектами. Например, приведенный ниже код:

const hello = <h1> Привет, народ </h1> Компилируется в -

const hello = React.createElement {
    type: "h1",
    props: {
      className: "greet",
      children: "Привет, народ"
    }
}

Поскольку JSX компилируется в объекты, он может использоваться наравне с обычными выражениями JavaScript.

18
Q

Напишите пример функционального компонента React.

A

В React функциональный компонент - это функция JavaScript, которая возвращает элемент React.

function Banner() {
  return (
    <h1>Backbencher</h1>
  )
}
19
Q

Что такое propsв компоненте?

A

Когда React видит элемент, представляющий собой определяемый пользователем компонент, он передает атрибуты и дочерние элементы JSX этому компоненту как единый объект. Мы обращаемся к этому объекту как к props

20
Q

Здесь у нас есть функциональный компонент.

function Banner(props) {
  return (
    <h1>{props.name}</h1>
  )
}

Преобразуйте приведенный выше код в компонент класса.

A
class Banner extends React.Component {
  render() {
    return (
      <h1>{this.props.name}</h1>
    )
  }
}
21
Q

У нас есть компонент класса.

class Banner extends React.Component {

state = {
text: “”
}

incrementCount = () => {
this.state.text = “Backbencher”;
}

  render() {
    return (
      <div>
        Click
        <h1>{this.state.text}</h1>
      </div>
    )
  }
}

Когда кнопка нажата, она должна отображать текст «Backbencher». Но этого не происходит. В чем причина?

A

В данном случае state неправильно обновляется.
Значение state должно обновляться через this.setState().
Лишь тогда UI ре-рендерится.

incrementCount должен обновляться так:

incrementCount = () => {
  this.setState({
    text: "Backbencher"
  })
}
22
Q

Следующий код дает неожиданный результат.

this.setState({
counter: this.state.counter + this.props.increment,
});

Что может быть причиной? Как это исправить?

A

Поскольку setState() является асинхронным, установка нового состояния на основе предыдущего состояния иногда может пойти не так. В таких сценариях мы можем использовать синтаксис функции обратного вызова для установки состояния.

this.setState((prevState, props) => {
  return {
    counter: prevState.counter + props.increment
  }
})
23
Q

В компоненте класса мы установили начальное состояние как:

state = {
name: “Backbencher”,
age: 23
}

Затем мы обновляем состояние с помощью следующего кода:

this.setState({
age: 24
});

Каким будет текущее значение объекта состояния?

A

Состояния объединены в компоненты класса. Таким образом, значение состояния будет:

{
name: “Backbencher”,
age: 24
}

24
Q

Здесь у нас есть компонент класса:

class Banner extends React.Component {

state = {
country: “India”
}

constructor(props) {
super(props);
}

logMessage() {
console.log(this.state.country);
}

  render() {
    return (
      <div>
        Click
      </div>
    )
  }
}

При нажатии кнопки отображается сообщение об ошибке вместо отображения “India”.

Uncaught TypeError: Cannot read property ‘state’ of undefined

В чем проблема и как ее решить?

A

Здесь функция logMessage вызывается в случае нажатия кнопки. Так как эта функция не является стрелочной, значение this внутри функции равно undefined. Мы пытаемся получить значение state от undefined. Из-за этого возникает TypeError.

Мы можем решить эту проблему, явно привязав logMessage к классу компонента, используя метод bind.

constructor(props) {
super(props);
this.logMessage = this.logMessage.bind(this);
}

Мы также можем изменить logMessage на стрелочную функцию для решения этой проблемы.

logMessage = () => {
console.log(this.state.country);
}

25
Q

Как мы можем условно отрендерить JSX в React?

A

Один из способов - использовать оператор if. Мы не можем использовать if…else внутри JSX. Но мы можем динамически возвращать элементы React в зависимости от условия.

if(isLoggedIn) {
  return 
} else {
  return 
}

Другой способ - использовать логические операторы для реализации встроенного if.

<div>
{count > 10 && }
</div>

Мы можем реализовать встроенный if…else с помощью тернарного оператора JavaScript.

{ isLoggedIn ? : }

26
Q

Что такое компоненты?

A

Компоненты - это строительные блоки любого React-приложения. Как правило, приложение на React состоит из множества компонентов. Проще говоря, компонент - это JavaScript-класс или функция, опционально принимающие так называемые свойства (пропы, properties, props) и возвращающие элемент React, описывающий, как должна выглядеть определенная часть UI.

React-приложение состоит из множества компонентов, каждый из которых отвечает за отрисовку (рендеринг, render) небольшой, переиспользуемой (имеющей возможность повторного использования) части HTML. Компоненты могут вкладываться в другие компоненты, что обеспечивает возможность создания сложных приложений, состоящих из элементарных “кирпичиков”.

27
Q

Назовите преимущества и ограничения React

A

Преимущества

Использование виртуального DOM для определения того, какие части UI подверглись изменениям, и повторный рендеринг только этих частей в обычном DOM существенно повышает производительность.

JSX (JavaScript и XML) делает код компонентов/блоков более читаемым. Он отчетливо показывает, как компоненты связаны (скомбинированы) между собой.

Связывание данных в React предоставляет хорошие условия для создания динамичных приложений.

Быстрый рендеринг. Использование встроенных методов для минимизации количества операций с DOM помогает оптимизировать и ускорить процесс обновления.

Тестируемость. Имеются отличные встроенные инструменты для тестирования и отладки кода.

Дружелюбность по отношению к SEO (search engine optimization, поисковая оптимизация).
React предоставляет возможность рендеринга страниц на стороне сервера и регистрации обработчиков событий на стороне клиента:
React.renderToString() вызывается на сервере
React.render() вызывается на клиенте
React сохраняет разметку, сгенерированную на сервере, и добавляет к ней обработчики событий

Ограничения

Кривая обучения. Будучи библиотекой, а не полноценным фреймворком, он требует глубоких знаний по внедрению UI в MVC (Model-View-Controller, Модель-Представление-Контроллер) фреймворки.

Одним из недостатков React также является ориентированность на слой представления. Для решения проблем “Представления” требуется поиск подходящей “Модели” и “Контроллера”.

Разработка приложения без использования изоморфного подхода приводит к проблемам с индексацией приложения поисковыми роботами.

28
Q

В6. Что такое ReactDOM?

A

ReactDOM - это пакет (package), предоставляющий специфичные для браузера методы, которые могут быть использованы на верхнем уровне приложения для эффективного управления DOM-элементами, имеющимися на странице. ReactDOM предоставляет в распоряжение разработчиков следующие методы:

render()
findDOMNode()
unmountComponentAtNode()
hydrate()
createPortal() и др.
29
Q

В7. В чем разница между ReactDOM и React?

A

Модуль ReactDOM содержит специфичные для DOM методы, в то время как React включает основные инструменты для разных платформ (например, React Native).

30
Q

В чем разница между классовыми и функциональными компонентами?

A

Функциональные компоненты

Функциональные компоненты - это обычные функции JavaScript. Чаще всего, они представлены в форме стрелочных функций, но их вполне можно создавать и с помощью ключевого слова function

Их часто называют компонентами без состояния, которые просто принимают данные и отображают их в некоторой форме; поэтому они, в основном, отвечают за рендеринг UI

В них нельзя использовать методы жизненного цикла (например, componentDidMount())

У них нет метода render()

Как правило, они отвечают за UI и форму представления данных (например, компонент кнопки)

Принимают и используют пропы

Им следует отдавать предпочтение в случаях, когда вам не требуется работать с состоянием

Классовые компоненты

Для создания классовых компонентов используются классы ES6, расширяющие класс React.Component

Их часто называют компонентами с состоянием, поскольку в них реализуется логика поведения на основе состояния

Внутри классов могут использоваться методы жизненного цикла (например, componentDidMount())

Принимают props и имеют к ним доступ через this.props

Могут содержать refs (ссылки) на нижележащие DOM-узлы

Могут использовать такие техники улучшения производительности, как shouldComponentUpdate() и PureComponent

31
Q

В чем разница между состоянием и пропами?

A

Состояние

Это данные, содержащиеся внутри компонента. Состояние является локальным (принадлежащем опеределенному компоненту). Компонент может обновлять состояние с помощью метода setState()

Пропы

Это данные, передаваемые дочернему компоненту от родительского. props являются доступными только для чтения в получающем их потомке. Тем не менее, передаваемая функция обратного вызова, может быть использована в потомке для обновления его состояния

32
Q

В11. Что такое “чистый” компонент (Pure Component)?

A

Pure Components - это компоненты, которые не рендерятся повторно при обновлении их состояния и пропов одними и теми же значениями. Если значение предыдущего и нового состояния и пропов равны, компонент не отрисовывается повторно. “Чистые” компоненты ограничивают повторный рендеринг, обеспечивая повышение производительности приложения.

33
Q

В12. Зачем использовать “чистые” компоненты? Когда следует использовать “чистые” компоненты вместо обычных?

A

Компоненты имеют один недостаток: они всегда повторно рендерятся вслед за родительским компонентом, даже если их пропы остались прежними.

Компоненты также всегда перерисовываются при обновлении их состояния, даже если новое значение состояние идентично предыдущему. При обновлении родительского компонента перерисовываются все его потомки, потомки потомков и т.д.

Такое поведение может привести с большому количеству ненужного рендеринга. Действительно, если компонент зависит только от пропов и состояния, тогда он должен обновляться только при их изменении независимо от того, что происходит с его родительским компонентом.

Это как раз то, для чего предназначены “чистые” компоненты - они останавливают “порочный круг” рендеринга. “Чистые” компоненты не перерисовываются до тех пор, пока не изменятся их пропы и состояние.

Случаи использования “чистых” компонентов:

  • В целях предотвращения повторного рендеринга компонента, чьи состояние и пропы остались прежними
  • Состояние и пропы компонента являются иммутабельными
  • Мы не планируем реализовывать собственный метод жизненного цикла shouldComponentUpdate()