Введение в react

Разделение кода на основе маршрутов

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

Часто таким удобным местом оказываются маршруты. Большинство интернет-пользователей привыкли к задержкам во время переходов между страницами. Поэтому и вам может быть выгодно повторно отрендерить всю страницу целиком. Это не позволит пользователям взаимодействовать с другими элементами на странице, пока происходит обновление.

Вот пример того, как организовать разделение кода на основе маршрутов с помощью и таких библиотек как React Router.

Forwarding refs in higher-order components

This technique can also be particularly useful with higher-order components (also known as HOCs). Let’s start with an example HOC that logs component props to the console:

The “logProps” HOC passes all through to the component it wraps, so the rendered output will be the same. For example, we can use this HOC to log all props that get passed to our “fancy button” component:

There is one caveat to the above example: refs will not get passed through. That’s because is not a prop. Like , it’s handled differently by React. If you add a ref to a HOC, the ref will refer to the outermost container component, not the wrapped component.

This means that refs intended for our component will actually be attached to the component:

Fortunately, we can explicitly forward refs to the inner component using the API. accepts a render function that receives and parameters and returns a React node. For example:

Разделение кода

Бандлинг — это хорошо, но по мере роста вашего приложения, ваш бандл тоже будет расти. Особенно если вы подключаете крупные сторонние библиотеки. Вам нужно следить за кодом, который вы подключаете, чтобы случайно не сделать приложение настолько большим, что его загрузка займёт слишком много времени.

Чтобы предотвратить разрастание бандла, стоит начать «разделять» ваш бандл. Разделение кода — это возможность, поддерживаемая такими бандлерами как Webpack, или Browserify (с factor-bundle), которая может создавать несколько бандлов и загружать их по мере необходимости.

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

Композиция компонентов

Компоненты могут ссылаться на другие компоненты в своём выводе. Это позволяет использовать одну и ту же абстракцию компонента для любого уровня детализации. Кнопка, форма, диалоговое окно, экран: в приложениях React все они обычно являются компонентами.

Например, мы можем создать компонент , который многократно отрисовывает :

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

Указание типа React-элемента

Первая часть JSX-тега определяет тип React-элемента.

Типы, написанные с большой буквы, указывают, что JSX-тег ссылается на React-компонент. Эти теги компилируются в прямую ссылку на именованную переменную, поэтому, если вы используете JSX-выражение , то  должен быть в области видимости.

React должен находиться в области видимости

Поскольку JSX компилируется в вызов , библиотека должна всегда быть в области видимости вашего JSX-кода.

К примеру, в данном коде оба импорта являются необходимыми, даже если на  и  нет прямых ссылок из JavaScript:

Если вы не используете сборщик JavaScript и загружаете React с помощью тега , то он уже доступен как в глобальной области видимости.

Использование записи через точку

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

Названия типов пользовательских компонентов должны начинаться с большой буквы

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

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

К примеру, этот код будет работать не так, как ожидается:

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

Выбор типа во время исполнения

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

Чтобы исправить это, мы присвоим тип в переменную, начинающуюся с заглавной буквы:

Дополнительные наблюдения

Предотвращение обработки кликов по умолчанию

Использование моих плагинов по-прежнему делает его довольно проблематичным, поскольку при добавлении этих полей ответа возникает некоторое мерцание. Проблема в том, что нажатие на ссылку действительно выполняется. Вы должны предотвратить это, чтобы ваша страница работала гладко:

  1. либо установите события клика для своих ссылок одним из следующих двух способов:

    или

  2. Лучше всего запустить это в готовом документе:

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

Повторяющиеся идентификаторы

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

Общий интерфейс¶

Настройки

Для настройки анимации используется объект , передаваемый и другим хукам

Свойство Значение по умолчанию Описание
mass (масса) 1 вес пружины
tension (натяжение) 170 энергичность растяжения/сжатия пружины
friction (трение) 26 сопротивление пружины
clamp (ограничение) false если , тогда пружина останавливается при достижении границы
precision (точность) 0.01 точность
velocity (скорость) начальная скорость
duration (продолжительность) undefined установление значения больше 0 приводит к переключению анимации с основанной на упругости на основанную на продолжительности
easing (характер движения) t => t по умолчанию является линейным

Пресеты

Существует набор общих пресетов, охватывающих некоторые распространенные случаи

Свойство Значение
config.defaut { mass: 1, tension: 170, friction: 26 }
config.gentle { mass: 1, tension: 120, friction: 14 }
config.wobbly { mass: 1, tension: 180, friction: 12 }
config.stiff { mass: 1, tension: 210, friction: 20 }
config.slow { mass: 1, tension: 280, friction: 60 }
config.molasses { mass: 1, tension: 280, friction: 120 }

Свойства

Все примитивы наследуют следующие свойства (некоторые могут предоставлять дополнительный функционал):

Свойство Тип Описание
from obj Базовые значение, опционально
to obj/fn/arr(obj) Конечные значения
delay num/fn Задержка в мс перед началом анимации. Может быть функцией для отдельных ключей: key => delay
immediate bool/fn Если , анимация отключается. Может быть функцией для отдельных ключей
config obj/fn Настройки пружины (масса, натяжение, трение и т.д.). Может быть функцией для отдельных ключей
reset bool Если , анимация начинается с самого начала
reverse bool Если , и меняются местами. Это имеет смысл только при совместном использовании с
onStart fn Колбек, вызываемый в начала анимации
onRest fn Колбек, вызываемый после остановки всех анимаций
onFrame fn Покадровый (frame by frame) колбек, первый передаваемый аргумент является значением анимации

Интерполяция

принимает объект следующей формы:

Свойство Значение по умолчанию Описание
extrapolateLeft extend Левая экстраполяция. Возможные значения: identity/clamp/extend
extrapolateRight extend Правая экстраполяция. Возможные значения: identity/clamp/extend
extrapolate extend Сокращенный синтаксис для установки левой и правой экстраполяций
range Массив входных значений
output undefined Массив соответствующих (mapped) выходных значений
map undefined Фильтр, применяемый к входному значению

Сокращение для диапазона: . Может быть функцией:

Предостережения

Вы можете столкнуться с неочевидными проблемами, когда работаете с компонентами высшего порядка.

Не используйте HOC внутри рендер-метода

Алгоритм сравнения React (известный как согласование или reconciliation) использует тождественность компонентов чтобы определить нужно ли обновить существующее поддерево, или убрать и монтировать вместо него новое. Если компонент, полученный из , идентичен () компоненту из предыдущего рендера, то React рекурсивно продолжит сравнивать поддерево. Если компоненты не равны, React полностью удалит и заменит старое поддерево.

Обычно нас это не беспокоит

Однако, важно учитывать что мы не можем применять компоненты высшего порядка внутри рендер-метода компонента:. Проблема не только в производительности

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

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

Не применяйте HOC в определении другого компонента. Сначала нужно отдельно получить компонент из HOC, и только потом использовать его. Таким образом React будет сравнивать один и тот же компонент при повторном рендере.

При необходимости (в редких случаях) можно динамически применять HOC в методах жизненного цикла или конструкторе компонента.

Копируйте статические методы

Иногда бывает полезно определить статические методы компонента. Например, статический метод библиотеки Relay позволяет составить композицию из фрагментов данных GraphQL.

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

Скопируйте недостающие методы в контейнер:

К сожалению, вы должны точно знать какие методы копировать. Вы можете воспользоваться hoist-non-react-statics, чтобы автоматически скопировать не связанные с React статические методы:

Другое возможное решение — экспортировать статические методы отдельно от компонента.

Рефы не передаются

По соглашению компоненты высшего порядка передают оборачиваемому компоненту все пропсы, кроме рефов. на самом деле не проп, как, например, , и поэтому иначе обрабатывается React. Реф элемента, созданного компонентом из HOC, будет указывать на экземпляр ближайшего в иерархии контейнера, а не на оборачиваемый компонент.

Вы можете решить эту проблему с помощью API-метода (добавлен в React 16.3). Узнать подробнее в главе Перенаправление рефов.

Примечание для разработчиков библиотек компонентов

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

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

8 ответов

Лучший ответ

Как я понял, желаемый эффект, который вы хотите, — это прокрутить до конца списка (или прокручиваемого элемента div), когда что-то происходит (например, элемент добавляется в список). Если это так, вы можете прокрутить до конца элемент контейнера (или даже саму страницу), используя только чистый Javascript и селекторы VueJS.

Я привел рабочий пример в этой скрипке: https://jsfiddle.net/my54bhwn

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

Надеюсь, это поможет вам.

60

Italo Ayres
22 Ноя 2016 в 08:32

Если вам нужно поддерживать IE11 и Edge, вы можете использовать:

Если вам не нужно поддерживать IE11, будет работать следующее (более понятный код):

1

Katinka Hesselink
25 Ноя 2019 в 15:38

  1. Используйте атрибут ref для элемента DOM для справки
  1. Вам нужно настроить ЧАСЫ
  1. Убедитесь, что вы используете правильный CSS

1

Alpesh Patil
17 Ноя 2019 в 20:16

Вот простой пример использования #ref для прокрутки до конца div.

Обратите внимание, что поместив в HTML, вы получите доступ к элементу через

8

Daolagajao
15 Дек 2017 в 17:03

Я попробовал принятое решение, и оно не сработало для меня. Я использую отладчик браузера и выяснил, что фактическая высота, которую следует использовать, это НО , которую вы должны поместить в ловушку , чтобы все решение работало.

34

juliangonzalez
14 Фев 2017 в 21:57

У меня была такая же потребность в моем приложении (со сложной структурой вложенных компонентов), и мне, к сожалению, не удалось заставить его работать.

Наконец, я использовал vue-scrollto, который отлично работает!

2

Ousmane
31 Май 2019 в 11:41

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

Затем, если вы хотите прокрутить этот элемент при загрузке страницы, вы можете вызвать этот метод следующим образом:

В противном случае, если вы хотите прокрутить его до нажатия кнопки или другого действия, вы можете вызвать его так же:

5

maxshuty
21 Мар 2020 в 14:55

В связанном вопросе, который вы разместили, у нас уже есть способ добиться этого в простом javascript, поэтому нам нужно только получить ссылку js на узел dom, который мы хотим прокрутить.

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

Или, если является обработчиком для какого-либо события пользовательского интерфейса, и цель связана с элементом div, который вы хотите прокрутить в пространстве, вы можете просто вместе с требуемыми аргументами и выполните прокрутку, как .

2

PanJunjie潘俊杰
22 Ноя 2016 в 07:31

React Function Component: ref

A React Ref should only be used in rare cases such as accessing/manipulating the DOM manually (e.g. focus element), animations, and integrating third-party DOM libraries (e.g. D3). If you have to use a Ref in a Function Component, you can define it within the component. In the following case, the input field will get focused after the component did mount:

import React,{ useState, useEffect, useRef }from'react';

constApp=()=>{

constgreeting, setGreeting=useState('Hello React!');

consthandleChange=event=>setGreeting(event.target.value);

return(

<div>

<h1>{greeting}</h1>

<Inputvalue={greeting}handleChange={handleChange}/>

</div>

);

};

constInput=({ value, handleChange })=>{

const ref =useRef();

useEffect(()=> ref.current.focus(),);

return(

<input

type="text"

value={value}

onChange={handleChange}

ref={ref}

/>

);

};

exportdefault App;

However, React Function Components cannot be given refs! If you try the following, the ref will be assigned to the component instance but not to the actual DOM node.



import React,{ useState, useEffect, useRef }from'react';

constApp=()=>{

constgreeting, setGreeting=useState('Hello React!');

consthandleChange=event=>setGreeting(event.target.value);

const ref =useRef();

useEffect(()=> ref.current.focus(),);

return(

<div>

<h1>{greeting}</h1>

<Inputvalue={greeting}handleChange={handleChange}ref={ref}/>

</div>

);

};

constInput=({ value, handleChange, ref })=>(

<input

type="text"

value={value}

onChange={handleChange}

ref={ref}

/>

);

exportdefault App;

It’s not recommended to pass a ref from a Parent Component to a Child Component and that’s why the assumption has always been: React Function Components cannot have refs. However, if you need to pass a ref to a Function Component — because you have to measure the size of a function component’s DOM node, for example, or like in this case to focus an input field from the outside — you can forward the ref:



import React,{

  useState,

  useEffect,

  useRef,

  forwardRef,

}from'react';

constApp=()=>{

constgreeting, setGreeting=useState('Hello React!');

consthandleChange=event=>setGreeting(event.target.value);

const ref =useRef();

useEffect(()=> ref.current.focus(),);

return(

<div>

<h1>{greeting}</h1>

<Inputvalue={greeting}handleChange={handleChange}ref={ref}/>

</div>

);

};

const Input =forwardRef(({ value, handleChange }, ref)=>(

<input

type="text"

value={value}

onChange={handleChange}

ref={ref}

/>

));

exportdefault App;

There are a few other things you may want to know about React Refs, so check out this article: How to use Ref in React or the official React documentation.

Перенаправление рефов в DOM-компоненты

Допустим, у нас есть компонент , который рендерит нативный DOM-элемент :

React-компоненты скрывают свои детали реализации, в том числе результат рендеринга. Реф элемента из  обычно и не требуется другим компонентам. Это хорошо, поскольку такой подход не даёт компонентам излишне полагаться на структуру DOM друг друга.

Такая инкапсуляция хорошо подходит компонентам, которые описывают некую законченную часть приложения, например, или . А вот в «маленьких», часто повторно используемых компонентах, таких как или , она может быть неудобной. Чтобы управлять фокусом, выделением и анимациями этих компонентов, придётся получить доступ к их DOM-узлам.

Перенаправление рефов позволяет взять из атрибутов компонента, и передать («перенаправить») его одному из дочерних компонентов.

В данном примере мы используем в компоненте , чтобы получить реф и передать его в дочерний DOM-элемент .

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

Рассмотрим этот пример пошагово:

  1. Мы создаём реф, вызвав и записываем его в переменную .
  2. Мы передаём переменную в , указывая её в JSX-атрибуте.
  3. React передаёт в функцию внутри в качестве второго аргумента.
  4. Мы передаём аргумент дальше в , указывая его в JSX-атрибуте.
  5. После привязки рефа будет указывать на DOM-узел .

React Function Component: TypeScript

If you are looking for a type system for your React application, you should give TypeScript for React Components a chance. A strongly typed language like TypeScript comes with many benefits for your developer experience ranging from IDE support to a more robust code base. You may wonder: How much different would a React Function Component with TypeScript be? Check out the following typed component:

import React,{ useState }from'react';

constApp=()=>{

constgreeting, setGreeting=useState(

'Hello Function Component!'

);

consthandleChange=event=>setGreeting(event.target.value);

return(

<Headlineheadline={greeting}onChangeHeadline={handleChange}/>

);

};

constHeadline=({

  headline,

  onChangeHeadline,

}{

  headline string,

  onChangeHeadline Function,

})=>(

<div>

<h1>{headline}</h1>

<inputtype="text"value={headline}onChange={onChangeHeadline}/>

</div>

);

exportdefault App;

It only defines the incoming props as types. However, most of the time type inference just works out of the box. For instance, the use State Hook from the App component doesn’t need to be typed, because from the initial value the types for and are inferred.

If you want to know how to get started with TypeScript in React, check out this comprehensive cheatsheet ranging from TypeScript setup to TypeScript recipes. It’s well maintained and my go-to resource to learn more about it.

Соглашение: Максимизируем композитивность

Не все HOC выглядят одинаково. Некоторые принимают всего лишь один аргумент — оборачиваемый компонент:

Обычно HOC принимают несколько аргументов. В данном примере из Relay, мы используем объект конфигурации с описанием данных для компонента:

Самый распространённый способ вызова HOC выглядит так:

Удивлены? Давайте разберём эту строку по частям.

Другими словами,  — это функция высшего порядка, которая возвращает компонент высшего порядка!

Такая форма может показаться запутанной и ненужной, но есть и преимущества. Вызов возвращает HOC с подписью . Функции с одинаковым типом результата и единственного аргумента легко совмещаются в композиции.

(Поэтому мы можем использовать и другие расширяющие функциональность HOC в качестве экспериментальных JavaScript-декораторов.)

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

React Function Component: state

React Hooks made it possible to use state (and side-effects) in Function Components. Finally we can create a React Function Component with state! Let’s say we moved all logic to our other Function Component and don’t pass any props to it:

import React from'react';

constApp=()=>{

return<Headline/>;

};

constHeadline=()=>{

const greeting ='Hello Function Component!';

return<h1>{greeting}</h1>;

};

exportdefault App;

So far, a user of this application has no way of interacting with the application and thus no way of changing the greeting variable. The application is static and not interactive at all. State is what makes React components interactive; and exciting as well. A React Hook helps us to accomplish it:

import React,{ useState }from'react';

constApp=()=>{

return<Headline/>;

};

constHeadline=()=>{

constgreeting, setGreeting=useState(

'Hello Function Component!'

);

return<h1>{greeting}</h1>;

};

exportdefault App;

The useState hook takes an initial state as parameter and returns an array which holds the current state as first item and a function to change the state as second item. We are using JavaScript array destructuring to access both items with a shorthand expression. In addition, the destructuring let’s us name the variables ourselves.

Let’s add an input field to change the state with the function:

import React,{ useState }from'react';

constApp=()=>{

return<Headline/>;

};

constHeadline=()=>{

constgreeting, setGreeting=useState(

'Hello Function Component!'

);

return(

<div>

<h1>{greeting}</h1>

<input

type="text"

value={greeting}

onChange={event=>setGreeting(event.target.value)}

/>

</div>

);

};

exportdefault App;

By providing an event handler to the input field, we are able to do something with a callback function when the input field changes its value. As argument of the callback function we receive a synthetic React event which holds the current value of the input field. This value is ultimately used to set the new state for the Function Component with an inline arrow function. We will see later how to extract this function from there.

Note: The input field receives the value of the component state too, because you want to control the state (value) of the input field and don’t let the native HTML element’s internal state take over. Doing it this way, the component has become a controlled component.

As you have seen, React Hooks enable us to use state in React (Arrow) Function Components. Whereas you would have used a setState method to write state in a Class Component, you can use the useState hook to write state in a Function Component.

Note: If you want to use React’s Context in Function Components, check out React’s Context Hook called useContext for reading from React’s Context in a component.

Бандлинг

Большинство React-приложений «собирают» свои файлы такими инструментами, как Webpack, Rollup или Browserify. Сборка (или «бандлинг») — это процесс выявления импортированных файлов и объединения их в один «собранный» файл (часто называемый «bundle» или «бандл»). Этот бандл после подключения на веб-страницу загружает всё приложение за один раз.

Пример

Приложение:

Бандл:

Если вы используете Create React App, Next.js, Gatsby или похожие инструменты, то у вас уже будет настроенный Webpack для бандлинга приложения.

Иначе, вам нужно будет настроить webpack самостоятельно. Для этого ознакомьтесь со страницами по установке и началу работы в документации по Webpack.

jQuery плагин прокрутки веб-страницы вверх

плавно прокручивает страницу вверх;кнопка прокрутки не видна вверху страницы, а появляется когда часть уже прокручена и исчезает после возврата к верху; имеет маленький размер и работает во всех браузерах.HTML код<a href=»#» id=»toTop«></a>
CSS#toTop {
 position:fixed;
 z-index:9999;
 bottom:10px;
 right:10px;
 background: #F4FFBF;
 border: 1px solid #ccc;
 padding: 5px;
 cursor: pointer;
 color: #666;
 text-decoration: none;
 width:100px;
}
#toTop {
 position:fixed;
 z-index:9999;
 bottom:10px;
 right:10px;
 background: url(‘…/yuor_image_64x64.png’) no-repeat;
 width: 64px;
 height: 64px;
 border: none;
 padding: 5px;
 cursor: pointer;
 color: transparent;
 text-decoration: none;
}
</head>$(function(){
  $.fn.scrollToTop=function(){
    $(this).hide().removeAttr(«href»);
    if($(window).scrollTop()!=»0″){
        $(this).fadeIn(«slow»)
  }
  var scrollDiv=$(this);
  $(window).scroll(function(){
    if($(window).scrollTop()==»0″){
    $(scrollDiv).fadeOut(«slow»)
    }else{
    $(scrollDiv).fadeIn(«slow»)
  }
  });
    $(this).click(function(){
      $(«html, body»).animate({scrollTop:0},»slow»)
    })
  }
});
$(function() {$(«#toTop»).scrollToTop();});
http://magentawave.com

Отрисовка компонента

Раньше мы сталкивались только с элементами React, представляющие DOM-теги:

Однако элементы также могут быть пользовательскими компонентами:

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

Например, этот код отображает «Привет, Сара» на странице:

Давайте посмотрим, что происходит в этом примере:

  1. Мы вызываем с элементом .
  2. React вызывает компонент с объектом как .
  3. Наш компонент возвращает элемент в качестве результата.
  4. React DOM эффективно обновляет DOM, чтобы соответствовать .

Code Splitting

Bundling is great, but as your app grows, your bundle will grow too. Especially if you are including large third-party libraries. You need to keep an eye on the code you are including in your bundle so that you don’t accidentally make it so large that your app takes a long time to load.

To avoid winding up with a large bundle, it’s good to get ahead of the problem and start “splitting” your bundle. Code-Splitting is a feature
supported by bundlers like Webpack, and Browserify (via factor-bundle) which can create multiple bundles that can be dynamically loaded at runtime.

Code-splitting your app can help you “lazy-load” just the things that are currently needed by the user, which can dramatically improve the performance of your app. While you haven’t reduced the overall amount of code in your app, you’ve avoided loading code that the user may never need, and reduced the amount of code needed during the initial load.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Все про сервера
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: