(В)Что такое ReactJS?

ReactJS — это библиотека JavaScript, используемая для создания повторно используемых компонентов для уровня представления в архитектуре MVC. Он очень эффективен и использует виртуальный DOM для рендеринга компонентов. Он работает на стороне клиента и написан на JSX.

(В)Объясните архитектуру MVC?

Платформа Модель-Представление-Контроллер (MVC) представляет собой шаблон архитектуры/проектирования, который разделяет приложение на три основных логических компонента: Модель, Представление и Контроллер. Каждый архитектурный компонент создан для обработки конкретных аспектов разработки приложения. Он изолирует уровень бизнеса, логики и представления друг от друга.

(В) Объясните составные части React?

Пять основных строительных блоков React:

  • Компоненты. Это повторно используемые блоки кода, возвращающие HTML.
  • JSX: означает JavaScript и XML и позволяет писать HTML в React.
  • Props и State: реквизиты аналогичны параметрам функции, а State аналогичны переменным.
  • Контекст: позволяет передавать данные через компоненты как реквизиты в иерархии.
  • Виртуальный DOM: это облегченная копия фактического DOM, которая упрощает манипулирование DOM.

(В) Объясните виртуальный DOM и дайте практический обзор того, как React отображает его в DOM.

Virtual DOM — интересная концепция; это сложная идея, которая сводится к гораздо более простому алгоритму.

Если в React мы создадим простой класс ES6 и распечатаем его, у нас будет функция (поскольку все функции могут использоваться в качестве конструктора в JavaScript):

const app = () => {
    let React = react,
        {Component} = React,
        DOM = reactDom
    class Comments extends Component {
        constructor(props){ super(props) }
        render(){ return <div>test</div> }
    }
    console.log(Comments)
}
require('react', 'react-dom').then(app)

console.log(Comments) дает нам что-то похожее на это (после компиляции Babel из ES6 в ES5):

function Comments(props) {
    _classCallCheck(this, Comments);
    return _possibleConstructorReturn(this, Object.getPrototypeOf(Comments).call(this, props));
}

Когда мы пишем что-то для отображения компонента React на экране, у нас может быть что-то вроде следующего:

DOM.render(<Comments />, document.body)

JSX также переносится в ES5 с помощью Babel:

DOM.render(React.createElement(Comments, null), document.body);

Мы видим, что <Comments /> транслируется непосредственно в React.createElement(Comments, null). Здесь мы можем увидеть, что на самом деле представляет собой объект Virtual DOM: простой объект JavaScript, который представляет тег, отображаемый на экране.

Давайте проверим вывод React.createElement():

console.log(<div/>)
// or
console.log(React.createElement('div', null))

Это дает нам:

{"type":"div","key":null,"ref":null,"props":{},"_owner":null,"_store":{}}

Видите, что type является строкой? DOM.render({...}) получает этот объект выше, смотрит на type и решает, следует ли повторно использовать существующий элемент <div> в DOM или создать новый <div> и добавить его.

Virtual DOM — это не просто Object — это рекурсивная структура. Например, если мы добавим два элемента под <div/>:

console.log(<div><span/><button/></div>)
// or
console.log(React.createElement(
    'div',
    null,
    React.createElement('span', null),
    React.createElement('button', null)
))

Мы получаем вложенное дерево объектов:

{
    "type":"div",
    "key":null,
    "ref":null,
    "props":{
        "children": [
            {"type":"span","key":null,"ref":null,"props":{}},
            {"type":"button","key":null,"ref":null,"props":{}}
        ]
    }
}

Вот почему в коде компонента React мы можем получить доступ к дочерним и родительским элементам через this.props.children. Что React будет делать, так это спускаться по очень глубокому дереву вложенных объектов (в зависимости от сложности вашего пользовательского интерфейса), каждый из которых находится в children своего родительского элемента.

Следует отметить, что type до сих пор была просто строкой. Когда элемент React создан из пользовательского компонента (например, Comments выше), type является функцией:

console.log(<Comments />)
// or
console.log(React.createElement(Comments, null))

дает нам:

{
    "key":null,
    "ref":null,
    "props":{},
    “type”: function Component() { ... }
}

(В) Каково значение ключей в React?

Ключи в React используются для идентификации уникальных элементов VDOM с соответствующими им данными, управляющими пользовательским интерфейсом; их наличие помогает React оптимизировать рендеринг за счет повторного использования существующих элементов DOM. Давайте рассмотрим пример, иллюстрирующий это.

У нас есть два <TwitterUser> компонента, отображаемые на странице, отрисованные в порядке убывания количества подписчиков:

-----------
| A - 103 |
-----------
-----------
| B - 92  |
-----------

Предположим, что B получает 105 подписчиков в Твиттере, поэтому приложение выполняет повторную визуализацию и меняет порядок A и B:

-----------
| B - 105 |
-----------
-----------
| A - 103 |
-----------

Без ключей React в первую очередь перерисовывал бы оба элемента <TwitterUser> в DOM. Он будет повторно использовать элементы DOM, но React не будет переупорядочивать элементы DOM на экране.

С помощью ключей React фактически меняет порядок элементов DOM вместо того, чтобы отображать множество вложенных изменений DOM. Это может значительно повысить производительность, особенно если используемые элементы DOM и VDOM/React требуют больших затрат на рендеринг.

Сами ключи должны представлять собой уникальный номер или строку; поэтому, если компонент React является единственным дочерним элементом со своим ключом, то React будет переназначать элемент DOM, представленный этим ключом, в будущих вызовах render().

Давайте продемонстрируем это на простом списке задач, созданном с помощью React.

class List extends Component {
    constructor(p){
        super(p)
        this.state = {
            items: Array(5).fill(1).map((x,i) => ({id:i}))
        }
    }
    componentDidMount(){
        const random = (a,b) => Math.random() < .5 ? -1 : 1
        setInterval(() => {
            this.setState({
                items: this.state.items.sort(random)
            })
        }, 20)
    }
    render() {
        let {items} = this.state
        return <ul>
            {items.map(item =>
                <li key={item.id}>{item.id}</li>)}
        </ul>
    }
}
DOM.render(<List />, document.body)

setInterval(), возникающий при монтировании, меняет порядок массива items в this.state каждые 20 мс. С точки зрения вычислений, если React меняет порядок элементов в состоянии, он будет манипулировать самими элементами DOM, а не «перетаскивать» их между позициями в <ul>.

Здесь стоит отметить, что если вы визуализируете однородный массив дочерних элементов — например, <li> выше — React фактически console.warn() уведомит вас о потенциальной проблеме, предоставив трассировку стека и номер строки для отладки. Вам не придется беспокоиться о том, что React незаметно сломается.

(В) Каковы преимущества React JS?

Преимущества React заключаются в следующем.

  • Использование JSX упрощает чтение и написание кода.
  • Улучшает производительность приложений за счет использования виртуального DOM.
  • Обеспечивает более простой способ интеграции с фреймворками.
  • Его можно использовать совместно и отображать как на сервере, так и на стороне клиента.
  • Написание интеграционных и модульных тестов можно упростить с помощью инструментов.

(В) Как браузеры читают JSX?

В общем, браузеры не способны читать JSX и способны читать только чистый JavaScript. Веб-браузеры читают JSX с помощью транспилятора. Транспиляторы используются для преобразования JSX в JavaScript. Используемый транспилятор называется Babel.

(В) Как написать комментарий в React?

В React есть два способа написания комментариев.

  • Многострочный комментарий. Мы можем писать многострочные комментарии в React, используя формат звездочки /* */.
  • Однострочный комментарий. В React мы можем писать одиночные комментарии, используя двойную косую черту //.

(В) Что такое состояние в React?

Состояние — это экземпляр класса компонента React, который можно определить как объект набора наблюдаемых свойств, которые управляют поведением компонента. Другими словами, состояние компонента — это объект, содержащий некоторую информацию, которая может измениться в течение срока службы компонента.

(Q)Объясните реквизиты в React?

React позволяет нам передавать информацию компоненту, используя так называемые реквизиты (что означает свойства). Реквизиты — это объекты, которые можно использовать внутри компонента.

Мы можем получить доступ к любому реквизиту внутри класса компонента, которому передается реквизит. Доступ к реквизитам можно получить, как показано ниже:

this.props.propName;

(Q)Что такое компонент более высокого порядка в React?

Компоненты высшего порядка или HOC — это расширенный метод повторного использования логики функциональности компонента. Он просто берет исходный компонент и возвращает улучшенный компонент. HOC полезны, поскольку их легко кодировать и читать. Кроме того, помогает избавиться от копирования одной и той же логики в каждом компоненте.

(В) Каковы жизненные циклы ReactJS?

  1. Инициализация
  2. Обновления состояния/имущества
  3. Разрушение

(Q)Когда был выпущен ReactJS?

Март 2013 г.

(В) Объясните одностороннюю привязку данных в React?

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

(В) Объясните положительные и отрицательные стороны компонентов мелкого рендеринга в тестах.

Положительные стороны:

  • Быстрее выполнить поверхностную визуализацию компонента, чем полную его визуализацию. Когда проект React содержит большое количество компонентов, эта разница в производительности может существенно повлиять на общее время, необходимое для выполнения модульных тестов.
  • Поверхностный рендеринг предотвращает тестирование за пределами тестируемого компонента — лучшая практика модульного тестирования.

Негативы:

  • Поверхностный рендеринг менее похож на реальное использование компонента как части приложения, поэтому он может не выявить определенные проблемы. Возьмем пример компонента <House />, который отображает компонент <LivingRoom />. Если в реальном приложении компонент <LivingRoom /> сломан и выдает ошибку, то <House /> не сможет отобразиться. Однако если модульные тесты <House /> используют только поверхностную отрисовку, эта проблема не будет выявлена, если <LivingRoom /> также не охвачен модульными тестами.

Спасибо вам

https://dsquasolve.in/