Jsliang Поиск работы - 38 - Сводка серии RACT

Поиск работы опрос

каталог

Чем отличается передок без закидывания от соленой рыбы?

содержание
каталог
2 Предисловие
Три очка знаний
Четыре фронтенда исторической эволюции
Пять преимуществ React по сравнению с нативным
Сравнение шести React и Vue
6.1 Сходства
6.2 Различия
Семь реактивных волокон
Восьмой жизненный цикл React
До версии 8.1
После версии 8.2
  8.2.1 Фаза монтирования
  8.2.2 Фаза обновления
  8.2.3 Этап удаления
Девять setState
9.1 Что происходит после вызова setState?
9.2 Является ли setState синхронным или асинхронным?
10 Ответьте на эти вопросы
Одиннадцать контролируемых и неконтролируемых компонентов
Двенадцать компонентов коммуникации
Тринадцать Редукс
Четырнадцать миксинов, HOC и хуков
14.1 Mixin
14.2 Компоненты высокого порядка (HOC)
14.3 Hook
15. Оптимизация производительности
16 ссылок
16.1 Точки знаний интервью
16.2 Система
16.3 Реакция против Vue
16.4 Жизненный цикл
16.5 Контролируемые и неконтролируемые компоненты
16.6 Diff и виртуальный DOM
16.7 Реагировать на исходный код
16.8 React Mixin
16.9 React Hoc
16.10 React Hooks
16.11 React Fiber
16.12 Рендеринг на стороне сервера (SSR)
16.13 Оптимизация производительности
16.14 Другое

2 Предисловие

Назад к содержанию

React — популярный сегодня интерфейсный фреймворк, а также необходимый для многих крупных заводов.

Хотя React отличается от Vue, он также являетсяMV*Framework, хотя реализация может быть разной, но все же есть некоторые схожие концепции, такие как управление данными, компонентизация, виртуальный DOM и так далее.

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

  • Как работает Реакт? Каковы плюсы и минусы?

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

Три очка знаний

Назад к содержанию

  • Историческая эволюция внешнего интерфейса
  • Реагировать против нативного
    • составной
    • естественная многослойность
    • хорошая экология
    • Эффективность разработки
  • Реагировать против Vue
    • Сходства: виртуальный DOM, компонентизация, инструменты сборки, сопутствующие платформы, инструменты разработчика Chrome.
    • Отличия: шаблоны и JSX, разные способы мониторинга изменений данных, разные Diff.
  • React Fiber
  • Жизненный цикл реакции
    • Стадия монтирования:constructor,getDerivedStateFromProps,render,componentDidMount
    • Этап обновления:getDerivedStateFromProps,shouldComponentUpdate,render,getSnapshotBeforeUpdate,componentDidUpdate
    • Этап удаления:componentWillUnmount
  • setState
    • что происходит после звонка
    • синхронный или асинхронный
  • это указывает на проблему
    • пройти черезbindисправить
    • Исправлено стрелочной функцией
    • bindОтличие от функции стрелки
  • Контролируемые и неконтролируемые компоненты:valueа такжеdefaultValue
  • компонент связи
    • props
    • Context
    • Redux
  • Redux:Redux,React-Reduxтак же какRedux-SagaРабочий процесс
  • Mixin,HOCа такжеHook
  • оптимизация производительности
    • Оптимизация рендеринга первого экранаprerender-spa-plugin
    • заполнитель страницыreact-placeholder
    • Оптимизация переключения страницhtml-webpack-plugin
    • Уменьшить код объема бизнесаTree Shaking
    • Извлечь общедоступный кодSplitChunkPlugin
    • сплит-кодCode Splitting
    • ленивая загрузкаreact-lazyload

Четыре фронтенда исторической эволюции

Назад к содержанию

  • эра jQuery

пройти черезAjaxПолучите данные из серверной части, затем сгенерируйте результат DOM через jQuery и обновите его на странице.

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

  • MVVM

В настоящее время с помощью MVVM двусторонняя привязка данных позволяет данным синхронизировать обновления DOM при их изменении и наоборот.

Этот параметр значительно снижает стоимость ручного обслуживания DOM, а MVVM — одна из функций React.Хотя React относится к одному потоку данных, нам нужно вручную реализовать двустороннюю привязку данных.

  • виртуальный DOM

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

Поэтому React реализует набор обновлений виртуального DOM внутри: он кэширует реальный DOM в JS.Каждый раз, когда происходит обновление данных, внутренний проходDiffАлгоритм сравнивает, а затем собирает кучу обновлений перед обновлением DOM, что значительно сокращает количество операций с DOM.

  • Дифференциальная операция

Так,DiffКак это работает?

DiffПолучите сравнение 4 случаев изменения узла виртуального DOM: тип узла изменился, тип узла тот же, изменился только атрибут или значение атрибута, изменился текст, а также были добавлены, удалены или перемещены дочерние узлы.

  • setState

Реагировать отличается от Vue и может бытьv-modelВвиду того, что операция пользователя и данные, хранящиеся в JavaScript, обновляются синхронно, необходимо пройтиsetStateдля обновления содержимого компонента.

  • Redux

Однако, если вы хотите визуализировать свои одноуровневые компоненты через компонент, React не так хорош в этом в начале, поэтому вам нужно ввести центр управления состоянием, чтобы помочь нам управлять состоянием (state), так что естьRedux.

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

  • Mobx

ReduxЕсть проблема, то есть модифицировать определенныйstate, надо пройтиaction.js,types.js,reducers.jsЭта серия файлов, как этоReduxХотя поток данных очень формальный, его сложно написать.

Поэтому у сообщества есть другой набор решений, которыйMobx.

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

ноMobxЕсть и недостатки, то есть поток данных слишком случайный, и найти ошибки сложно.

  • End

Поэтому сообщество рекомендует MobX для небольших проектов, а Redux — для крупных.

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

Пять преимуществ React по сравнению с нативным

Назад к содержанию

  • составной: среди них компонентизация React является наиболее тщательной, и она может достигать даже атомарных компонентов на функциональном уровне.Высокая степень компонентизации может сделать наш проект простым в обслуживании и простым в объединении и расширении.
  • естественная многослойность: код в эпоху JQuery в основном представляет собой спагетти-код с серьезными связями.Современные фреймворки, будь то режим MVC, MVP или MVVM, могут помочь нам в многослойности, а развязку кода легче читать и писать.
  • экология: Теперь основной внешний интерфейс поставляется с экологией, будь то архитектура управления потоками данных или зрелое решение.
  • Эффективность разработки: современные интерфейсные фреймворки автоматически обновляют DOM по умолчанию вместо нашей ручной операции, что освобождает разработчика от ручных затрат на DOM, повышает эффективность разработки и принципиально решает проблему синхронизации пользовательского интерфейса и состояния.

Сравнение шести React и Vue

Назад к содержанию

6.1 Сходства

Назад к содержанию

  1. виртуальный DOM. Сопоставьте реальный DOM и лучше отслеживайте отображаемую страницу, сравнивая новые и старые различия DOM.
  2. составной. Разделите приложение на модули с четкими функциями, и каждый модуль сможет соответствующим образом взаимодействовать друг с другом.
  3. инструменты для сборки. имеют свои собственные инструменты сборки, черезWebpack + Babelпостроить подмости.
  4. Инструменты разработчика Chrome. У обоих есть хорошие расширения Chrome, помогающие находить ошибки.
  5. Соответствующая рамка. Vue имеетVue-routerа такжеVuex, в то время как у React естьReact-routerа такжеReact-Redux.

6.2 Различия

Назад к содержанию

  1. Шаблоны против JSX. Vue рекомендует писать приблизительные соглашенияHTMLШаблон визуализируется, и React рекомендует способ написания JSX.
  2. Следите за разницей изменений данных. Vue использует изменяемые данные, в то время как React уделяет больше внимания неизменности данных. Пройти в Vuev-modelДанные привязки, после того как пользователь изменит входное значение, соответствующее значение также изменится соответствующим образом. И React должен пройтиsetStateВнесите изменения в настройки.
  3. Диф отличается. Vue использует двусвязный список для обновления DOM при сравнении, в то время как React используетDiffОчередь содержит DOM, который необходимо обновить, получитьpatchдерево, а затем обновлять DOM в пакетном режиме.
  4. Команда разработчиков. Vue начал с Эвана Ю в качестве ядра, а затем нанял других людей, чтобы сформировать команду; React был запущен командой Facebook. Поэтому, если люди в Интернете сравнивают исходный код, Vue проще и понятнее, чем React.

Честно говоря, я смотрю на сходства и различия того, что говорят другие, и переживаю, что у некоторых "маленьких друзей" есть свое мнение, а потом их здесь распылят.jsliangЯ не осмеливаюсь придерживаться собственного мнения, но всегда отвечаю интервьюеру / смешно

Семь реактивных волокон

Назад к содержанию

Основной процесс React можно разделить на две части:

  • reconciliation(Алгоритм планирования, также известный какrender):
    • возобновитьstateа такжеprops
    • Вызов хуков жизненного цикла
    • Генерировать виртуальный DOM
    • Через старые и новые VDOMdiffАлгоритм получения VDOMchange
    • Определите, требуется ли повторный рендеринг
  • commit
    • При необходимости манипулируйте обновлениями узлов DOM;

зачем нужноFiber?

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

И ключевой момент в том, чтосинхронная блокировка.

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

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

а такжеReact FiberОн был рожден для достижения разделения задач.

React FiberКраткое описание:

  • Алгоритм планирования был переработан в версии React 16, заменив предыдущийstack reconcilerвосстановленныйfiber reconciler, становится связанным списком и указателемАлгоритм обхода дерева односвязных списков. Благодаря отображению указателя каждый блок записывает текущий предыдущий шаг и следующий шаг обхода, так что обход можно приостановить и возобновить.
  • Его можно понимать как алгоритм планирования разделения задач, который в основном делит исходные синхронные задачи рендеринга обновлений на независимые.небольшой оперативный блок, в соответствии с разными приоритетами, небольшие задачи распределяются на время простоя браузера для выполнения, полностью используя механизм цикла событий основного процесса.

React Fiberосновной:

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

Восьмой жизненный цикл React

Назад к содержанию

Постепенно устаревающие методы жизненного цикла React:

  • componentWillMount
  • componentWillReceiveProps
  • componentWillUpdate

До версии 8.1

Назад к содержанию

После версии 8.2

Назад к содержанию

8.2.1 Фаза монтирования

Назад к содержанию

  • constructor: конструктор, выполняется первым, обычно инициализируется в конструктореstateобъект или привязка к пользовательскому методуthis
  • getDerivedStateFromProps:static getDerivedStateFromProps(nextProps, prevState), это статический метод, когда мы получаем новые свойства и хотим изменить нашиstate,можно использоватьgetDerivedStateFromProps.
  • render:renderФункция является чистой функцией, она возвращает только то, что нужно отрисовать, и не должна содержать другой бизнес-логики, может возвращать нативные компоненты DOM, React,Fragment,Portals, строки, числа и т. д.
  • componentDidMount: вызывается после загрузки компонента, в это время мы можем получить узел DOM и управлять им, напримерCanvas,SVGи так далее. Запросы сервера и подписки могут быть записаны в нем, но не забудьтеcomponentWillUnmountОтписаться в .

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

Существуют следующие проблемы:

  • ЗачемgetDerivedStateFromPropsэто статично?

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

  • какие жизненные циклы могутsetState?

допустимыйcomponentDidMountа такжеcomponentDidUpdateНа данный момент DOM стабилизировался, и можно выполнять манипуляции с данными.

8.2.2 Этап обновления

Назад к содержанию

  • getDerivedStateFromProps: этот метод также вызывается на этапе обновления.
  • shouldComponentUpdate:shouldComponentUpdate(nextProps, nextState), есть два параметра, указывающие на новый атрибут и измененныйstate, который возвращает логическое значение. еслиtrueУказывает, что будет запущен повторный рендеринг,falseУказывает, что повторный рендеринг не будет запущен, и возвращается по умолчанию.true. Вы можете использовать этот жизненный цикл для оптимизации производительности программы React.
  • render: то же, что и этап монтированияrender.
  • getSnapshotBeforeUpdate:getSnapshotBeforeUpdate(prevProps, prevState), этот метод будетrenderПозже,componentDidUpdateВызванный ранее, есть два параметра, указывающих предыдущий атрибут и предыдущийstate. Эта функция имеет возвращаемое значение, которое передается в качестве третьего параметра вcomponentDidUpdate, если вам не нужно возвращаемое значение, вы можете вернутьnull, этот метод должен иcomponentDidUpdateС использованием.
  • componentDidUpdate:componentDidUpdate(prevProps, prevState, snapshot),существуетgetSnapshotBeforeUpdate

После вызова есть три параметра, указывающие на предыдущийprops,предыдущийstate,так же какsnapshot. параметрsnapshotдаgetSnapshotBeforeUpdateВозвращается, если вам нужно использовать его при запуске некоторых функций обратного вызоваDOMсостояние элемента, процесс сравнения или расчета переносится вgetSnapshotBeforeUpdate, затем вcomponentDidUpdateВ унифицированном обратном вызове триггера или обновлении состояния.

8.2.3 Этап удаления

Назад к содержанию

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

Девять setState

Назад к содержанию

setStateМетод, используемый в React для изменения состояния и обновления представления.

9.1 Что происходит после вызова setState?

Назад к содержанию

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

После корректировки реагируйте реагируйте дерево элемента реагирования относительно эффективным образом и выполняют весь интерфейс интерфейса пользовательского интерфейса относительно эффективным образом и отображают весь интерфейс интерфейса UI.

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

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

Проще говоря:

  1. Объедините объекты параметров, чтобы запустить процесс согласования
  2. Вычислите разницу между новым деревом и старым деревом (Diff)
  3. Минимизируйте повторный рендеринг на основе различий

9.2 Является ли setState синхронным или асинхронным?

Назад к содержанию

Ответ: Иногда синхронно, иногда асинхронно.

  1. setStateАсинхронность в синтетических событиях и хуках, в нативных событиях иsetTimeoutявляются синхронными.
  2. setStateАсинхронность не означает, что внутренняя реализация реализована асинхронным кодом, процесс и код собственного исполнения синхронны, но последовательность вызова синтетических событий и функций-ловушек предшествует обновлению, так что синтетические события и функции-ловушки не могут обновляться сразу после значения, таким образом образуя так называемый асинхронный.
  3. setStateВы можете передать второй параметрsetState(partialState, callback), получите обновленный результат в методе обратного вызова.

10 Ответьте на эти вопросы

Назад к содержанию

Есть несколько способов исправить в Reactthis, вот 4 метода:

import React, { Component } from 'react'

class App extends Component {
  constructor (props) {
    super(props);
    this.handleClick = this.handleClick.bind(this);
  }
  handleClick () {
    console.log('jsliang 2020');
  }
  handleClick2 = () => {
    console.log('jsliang 2021');
  }
  render () {
    // 四种绑定方法
    return (
      <div className='App'>
        {/* 方法一:通过 constructor 中进行 bind 绑定 */}
        <button onClick={this.handleClick}>btn 1</button>

        {/* 方法二:在里边绑定 this */}
        <button onClick={this.handleClick.bind(this)}>btn 2</button>

        {/* 方法三:通过箭头函数返回事件 */}
        <button onClick={() => this.handleClick()}>btn 3</button>
        
        {/* 方法四:让方法变成箭头函数 */}
        <button onClick={this.handleClick2}>btn 4</button>
        
        {/* 额外:直接调用不需要绑定 this */}
        {this.handleClick()}
      </div>
    )
  }
}

export default App;

Затем используйтеbindФункция и стрелка Есть ли разница?

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

пройти черезbindэквивалентно:Foo.prototype.a = function() {}, является корректирующей привязкой через цепочку прототипов.

А по стрелочной функции это эквивалентно:

class Foo {
  constructor() {
    this.a = () => {};
  }
}

Одиннадцать контролируемых и неконтролируемых компонентов

Назад к содержанию

существуетAnt Designв, даInputПоле ввода для работы, если оно измененоdefaultValueсочтет это бесполезным.

Это из-за реагированияformСборка формыdefaultValueПосле передачи значения последующие измененияdefaultValueне работает и игнорируется.

В частности, это неуправляемый компонент React, состояние которого находится вinputРеагировать на внутренний контроль , не контролируемый вызывающей стороной.

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

Двенадцать компонентов коммуникации

Назад к содержанию

  • Родительский компонент взаимодействует с дочерним компонентом: переход от родительского компонента к дочернему компонентуpropsспособ связи с дочерними компонентами.
  • Дочерний компонент взаимодействует с родительским компонентом: Родительский компонент находится вpropsЗатем дочерний компонент вызывает этот метод, чтобы передать информацию, которую ему нужно передать, в область действия родительского компонента.
  • сложная коммуникация: с помощью ReactContext,илиReduxпередача данных.

Тринадцать Редукс

Назад к содержанию

Есть много онлайнRedux,React-Redux,Redux-SagaИспользованиеjsliangОдин на работе, чтобы использовать его.

Рабочий список

- 某个页面文件夹
   - View.jsx     当前页面主入口
   - Child.jsx    子组件
   - Brother.jsx  兄弟组件
   - action.js    动作
   - types.js     类型
   - saga.js      调用接口
   - reducers.js  处理数据

Обычный рабочий каталог показан выше, как мы используем его в нашей работе?

первый,существуетView.jsxпрошедшийReact-ReduxсоединятьReactа такжеRedux

потом, предполагая сейчасChild.jsxНужно вызвать интерфейс (асинхронная обработка), тогда:

  1. существуетaction.jsОпределите этот метод и какие параметры будут переданы.
  2. вtypes.jsявляется вспомогательнымaction.jsСодержимое , чтобы предотвратить повторение тела метода, мы будемtypes.jsверхний регистр определен вactionимя.
  3. В это время вы можетеView.jsxпрошедшийdispatchтриггерный метод, т.е.dispatch(getPage(page, perPage)).
  4. В это время вreducers.jsнейтрализоватьsage.jsЭтот метод можно контролировать вsage.jsвызвать интерфейс и обработать данные.
  5. После обработки,sage.jsперешел кreducers.js, пусть обрабатывает данные.

тогда,еслиBrother.jsxпросто хотите обработать данные иChild.jsxиспользуется в, тогда наш метод обработки такой же, как указано выше, но непосредственно вreducers.jsпроцесс, вместоsage.jsЭто просто вызов интерфейса.

наконец, Давайте посмотримreduxа такжеreact-reduxtВпечатлен рабочим процессом:

Redux

React-Redux

Четырнадцать миксинов, HOC и хуков

Назад к содержанию

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

Mixin,HOCа такжеHookИспользуются 3 типа ReactМультиплексирование логики состоянийТехнология,Mixinбыл заброшен,HOCВ расцвете сил,HookОчень важно освоить его повторяющиеся факторы и законы, когда он только зарождается.

14.1 Mixin

Назад к содержанию

Mixin(Смешивание) — это способ расширить функцию сбора, которая по существу копирует свойства одного объекта в другой объект.

Однако вы можете скопировать любой метод любого количества объектов в новый объект, что невозможно при наследовании.

В основном это решает проблему повторного использования кода.

Тем не менее, это сопряжено с некоторыми вредами:

  • MixinВзаимозависимы и связаны друг с другом, что не способствует сопровождению кода.
  • разныеMixinметоды могут конфликтовать друг с другом
  • MixinОчень часто компоненты воспринимаются и даже обрабатываются для них, вызывая лавинообразное усложнение кода.

14.2 Компоненты высшего порядка (HOC)

Назад к содержанию

на основеMixin, React представил реализацию шаблона декоратора: компоненты высшего порядка (HOC).

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

Компоненты высшего порядка (HOC) — это продвинутая техника в React для повторного использования логики компонентов. Но компоненты высшего порядка сами по себе не являются API React. Это просто паттерн, который неизбежно вытекает из композиционной природы самого React.

function visible(WrappedComponent) {
  return class extends Component {
    render() {
      const { visible, ...props } = this.props;
      if (visible === false) return null;
      return <WrappedComponent {...props} />;
    }
  }
}

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

Компоненты более высокого порядка решаютMixinПроблема принесла:

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

Однако там, где есть свет, всегда есть тьма, а компоненты более высокого порядка тоже имеют некоторые недостатки:

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

14.3 Hook

Назад к содержанию

Hookэто реакцияv16.7.0-alphaДобавлены новые функции в . это позволяет вамclassиспользовать кромеstateи другие функции React.

использоватьHook, вы можете включитьstateЛогика абстрагируется от компонента, что упрощает тестирование.

в то же время,HookМожет помочь вам повторно использовать эту логику, не переписывая структуру компонента.

Следовательно, его также можно использовать в качестве решения для реализации повторного использования логики состояния.

HookПреимущества использования:

  • Уменьшите риск повторного использования логики состояния:Hookа такжеMixinЕсть определенные сходства в использовании, ноMixinВведенные логика и состояние могут перекрывать друг друга, и несколькоHookОни не влияют друг на друга, что избавляет нас от необходимости сосредотачиваться на предотвращении конфликтов, избегающих логического повторного использования.
  • Избегайте гнездования в аду: интенсивное использованиеHOCВ случае очень глубокой вложенности кода используйтеHook, мы можем добиться повторного использования логики плоского состояния и избежать большого количества вложенных компонентов.
  • Сделайте компоненты более понятными:В использованииclassКогда компоненты строят нашу программу, каждый из них имеет свое собственное состояние.Сложность бизнес-логики делает эти компоненты все больше и больше, и в каждом жизненном цикле будет вызываться все больше и больше логики, что усложняет ее обслуживание. использоватьHook, что позволяет в большей степени изолировать общую логику и разделить компонент на более мелкие функции, а не принудительное разделение на основе методов жизненного цикла.
  • Используйте функции вместо классов: по сравнению с функцией напишитеclassВозможно, вам потребуется освоить больше знаний, и тем больше моментов, на которые вам нужно обратить внимание, таких какthisУказывать, связывать события и т. д. Кроме того, компьютер понимает функцию лучше, чемclassБыстрее.Hooksтак что вы можетеclassИспользуйте больше новых функций React.

15. Оптимизация производительности

Назад к содержанию

  1. Оптимизация рендеринга первого экрана.<div id="root"> SVG </div>, вы также можете использовать плагинprerender-spa-pluginПлагин выполняет рендеринг первого экрана.
  2. Оптимизация переключения страниц. использоватьhtml-webpack-pluginПлагины автоматически вставляютсяloading, чтобы при переключении не нужно было писать наборloading.
  3. Уменьшить размер бизнес-кода. пройти черезTree Shakingчтобы уменьшить часть кода.
  4. Извлечь общедоступный код. пройти черезSplitChunkPluginАвтоматически разделяйте базовую бизнес-библиотеку, чтобы уменьшить количество больших файлов.
  5. сплит-код. пройти черезCode SplittingДля ленивой загрузки кода улучшите процесс загрузки пользователем. Например,React Loadableпереписать компонент для поддержки динамическогоimportформа.
  6. ленивая загрузка. Реакция может пройтиreact-lazyloadЭтот зрелый компонент поддерживает отложенную загрузку.
  7. заполнитель страницы. Иногда при загрузке текста и изображений страницы возникает ситуация «заставки». Например, изображение или текст загружены не полностью, а соответствующая позиция пуста. После загрузки страница внезапно открывается, в результате в заставке. Используйте сторонние компонентыreact-placeholderЭту ситуацию можно решить.

16 ссылок

Назад к содержанию

В этой серии 67 наименований.

16.1 Точки знаний интервью

Назад к содержанию

2019:

2018:

2017:

16.2 Система

Назад к содержанию

2017:

16.3 Реакция против Vue

Назад к содержанию

2020:

2017:

16.4 Жизненный цикл

Назад к содержанию

до настоящего времени:

2019:

2018:

2017:

16.5 Контролируемые и неконтролируемые компоненты

Назад к содержанию

2019:

2016:

16.6 Diff и виртуальный DOM

Назад к содержанию

2019:

2018:

2017:

2015:

16.7 Реагировать на исходный код

Назад к содержанию

2018:

2017:

2015:

16.8 React Mixin

Назад к содержанию

2015:

16.9 React Hoc

Назад к содержанию

2019:

2017:

16.10 React Hooks

Назад к содержанию

2019:

2018:

16.11 React Fiber

Назад к содержанию

2018:

16.12 Рендеринг на стороне сервера (SSR)

Назад к содержанию

16.13 Оптимизация производительности

Назад к содержанию

2019:

2018:

2017:

16.14 Другое

Назад к содержанию

2019:

2018:

2017:

2015:


репозиторий документации jsliang предоставляетсяЛян ЦзюньронгиспользоватьCreative Commons Attribution-NonCommercial-ShareAlike 4.0 Международная лицензияЛицензия.
на основеGitHub.com/l ian Jun Ron…Создание работ выше.
Права на использование, отличные от разрешенных в настоящем Лицензионном соглашении, могут быть получены отCreative Commons.org/licenses/не…получено в.