Эта статья была создана в сотрудничестве с Сенчей . Спасибо за поддержку партнеров, которые делают возможным использование SitePoint.
React — это набор инструментов и библиотек, которые не зависят друг от друга, что может быть непросто для разработчиков React. Множество инструментов дает много свободы, потому что вы можете найти лучшие из них для работы под рукой. В React есть много способов решить проблему, поэтому лучше знать несколько инструментов. Есть инструменты, которые лучше справляются с определенными проблемами, чем другие, все зависит от контекста. Ниже приведен список инструментов, которые я считаю полезными в крупномасштабном проекте React, некоторые новее других, а некоторые решают определенную проблему при работе с React — но все они мне показались полезными.
Для каждого инструмента React я предоставлю краткую сводку с основной информацией, прежде чем углубляться в крутые вещи, которые он может сделать, и мои мысли. Имейте в виду, что все эти инструменты могут быть изменены.
создавать реагирующие-приложение
- веб-сайт : facebook.github.io/create-react-app
- хранилище : github.com/facebook/create-react-app
- Звезды GitHub : 60 000+
- разработчик : Facebook
- текущая версия : 2.1.8
- Авторы: 600+
Отличный способ начать проект React — создать приложение React. Этот инструмент абстрагирует большую часть инструментов React в одну зависимость. Такие инструменты, как Webpack, Babel и ESList, находятся под капотом. Вы можете начать весь проект React с помощью одной команды. Инструмент генерирует минимальный набор файлов, чтобы вы могли сосредоточиться на приложении. Вам понадобится Node 6+, чтобы использовать это.
Например, чтобы запустить приложение с помощью npx
:
npx create-react-app my-killer-app
Выполнение вышеуказанной команды создаст каталог и создаст файлы скаффолдинга. Команда устанавливает транзитивные зависимости без вмешательства. Здесь нет сложных файлов конфигурации, только необходимый минимум для создания вашего приложения.
Обновления заключаются в один пакет NPM. Нет необходимости связываться с веб-пакетом и друзьями, чтобы воспользоваться новейшими функциями. Вы можете обновить приложение Create React с помощью одной команды, когда будут выпущены новые версии. Для обновления установите программный пакет response react-scripts@latest
пакет NPM.
Внутри папки проекта вы можете найти встроенные команды. Например, npm start
приложение. Во время работы приложение загружает все изменения, внесенные в код. Когда вы сохраните файлы проекта, они перезагрузят эти изменения в браузере. Все возникающие ошибки компиляции будут отображаться в консоли, на которой запущено приложение.
Create React App поддерживает вашу автоматизацию тестирования. Запуск npm test
запустит Jest и запустит все тесты в вашем проекте. Команда запускает наблюдателя в интерактивном режиме, поэтому она будет отслеживать изменения файла. Когда вы вносите изменения, наблюдатель запускает только те тесты, на которые он влияет. Обязательно назовите тестовые файлы *.test.js
чтобы Jest мог их забрать.
Создать приложение React абстрагирует от конфигурации проекта. Разработчики JavaScript часто сталкиваются с трудностями при настройке современных инструментов. Итак, вот инструмент, который автоматизирует это для вас без суеты.
Плюсы:
- начать с одной команды
- только одна зависимость
- нет необходимости в настройке
Против:
- нет рендеринга на стороне сервера
Next.js
- веб-сайт : nextjs.org
- хранилище : github.com/zeit/next.js
- Звезды GitHub : 35 000+
- разработчик : ZEIT
- текущая версия : 8.0.3
- Авторы: 600+
Next.js выполняет рендеринг на стороне сервера через изоморфное приложение React. Ноль настроен и занимает мало времени, чтобы начать. Вы получаете разделение кода, маршрутизацию на основе папок, горячую перезагрузку кода и универсальный рендеринг. Разделение кода загружает только необходимые компоненты на странице. Маршрутизация ищет папку pages
в проекте и находит файл, который соответствует связанному маршруту. Горячая перезагрузка кода отслеживает изменения файлов и перезагружает части приложения. Это хорошо для разработчиков, которым нравятся быстрые циклы обратной связи между изменениями кода. Рендеринг происходит как на клиенте, так и на сервере, потому что приложение изоморфно. Это позволяет повторно использовать код, поскольку тот же код, который выполняется на сервере, также выполняется на клиенте.
Чтобы начать работу с Next.js, выполните:
npm install --save next react react-dom
Убедитесь, что вы создали папку проекта с package.json
. В этом файле пакета соедините Next.js со next build
и сценариями next start
. Эти сценарии отображаются для запуска сценариев, которые вы выполняете через NPM.
С Next.js вы можете размещать статические файлы, создавая static
папку. Все, что вы помещаете в эту папку, становится статическим активом в приложении. Это позволяет вам обслуживать ресурсы, такие как изображения или CSS.
Вы можете экспортировать Next.js как статические HTML-страницы, чтобы избежать рендеринга на стороне сервера. В папке проекта next export
генерирует статические HTML-страницы, которые вы можете разместить где угодно. Экспорт поддерживает практически все функции, динамические URL-адреса, предварительную выборку, предварительную загрузку и динамический импорт. По умолчанию конфигурация не требуется. Он генерирует статические файлы HTML из каталога pages
. Команда export находится внутри package.json
, поэтому запустите ее с помощью команды npm run export
. Экспортные файлы появятся в каталоге out
.
Плюсы:
- нулевая конфигурация с расширенными функциями
- приложение готово к продвижению без хлопот
- опция статического HTML исключает рендеринг на стороне сервера
Против:
- настройка маршрутов может быть проблемой
Redux
- веб-сайт : redux.js.org
- хранилище : github.com/reduxjs/redux
- Звезды GitHub : 45 000+
- разработчик : Луна
- текущая версия : 4.0.1
- Авторы: 600+
В React сложно обойти многие реквизиты и параметры состояния. Иерархия компонентов может иметь много компонентов React. Сбой одного параметра где-то вдоль цепи опасен. Это расстраивает отладку параметров при большом количестве компонентов.
Лучшее решение — абстрагировать это через конечный автомат. Redux — это контейнер состояния для программ JavaScript. Все состояние приложения находится внутри одного магазина. Чтобы изменить состояние, запустите действие и позвольте редукторам обработать все остальное. Думайте о Redux как о конечном автомате, который изменяет состояние, испуская действия. Отправка действий через магазин — единственный способ изменить состояние. Редукторы не изменяют состояние, а возвращают новый объект только при изменении состояния. Это делает редуктор чистой функцией, которая поддерживает предсказуемость приложения. Ошибки часто сканируются там, где существует непредсказуемое поведение, поэтому редукторы подавляют эту проблему.
Redux — это отдельная библиотека, которую вы можете использовать в обычном JavaScript. Привязки React доступны для подключения приложения React с меньшими усилиями. <Provider />
делает хранилище Redux доступным для корневого компонента. Функция connect
отображает состояния для реквизита для всех компонентов в магазине. Функция подключения передает параметры, необходимые для работы каждого компонента.
В типичном приложении React есть один корневой компонент с одним хранилищем. Там может быть иерархия магазинов Redux, которые разделяют дерево состояний. Это похоже на React, где один корневой компонент может иметь много мелких компонентов.
Чтобы настроить привязки Redux в проекте React:
npm install --save redux react-redux
Обязательно относитесь к Redux и React-Redux как к отдельным зависимостям.
Плюсы:
- включает в себя звуковое программирование как чистые функции
- привязки доступны для React
- автоматизирует государственное управление
Против:
- настроить с нуля может быть немного больно
энзим
- веб-сайт : airbnb.io/enzyme/
- хранилище : github.com/airbnb/enzyme
- Звезды GitHub : 15 000+
- разработчик : Airbnb
- текущая версия : 3.9.0
- Авторы: 300+
Фермент похож на jQuery для тестирования компонентов React. Вы можете поверхностно обрабатывать компоненты без браузера. Вы можете перемещаться, искать компоненты и делать утверждения. Это сокращает цикл обратной связи, поскольку устраняет браузер. Неглубокий рендеринг полезен, потому что он не превышает глубину более одного уровня. Это изолирует тест на одном уровне в иерархии компонентов React.
API фермента поддерживает симуляцию событий. Функция simulate()
вызывает обработчик событий в одном узле. Например, .simulate('click')
вызывает onClick
prop. Мелкий рендеринг изолирует тестируемый узел, что добавляет фокус.
Фермент поставляется с адаптером для каждой версии React. Таким образом, enzyme-adapter-react-16
работает на React 16.4 или выше. Для Реакта 16.3.0 используйте enzyme-adapter-react-16.3
реактив enzyme-adapter-react-16.3
. Для Jest 15+ Enzyme больше не нуждается в специальной конфигурации. Для написания тестов импортируйте функции React, Enzyme и тестируемую систему сверху.
Например:
import React from 'react'; import { shallow } from 'enzyme'; import Foo from '../Foo'; // system under test describe('A killer test suite', () => { it('should shallow render without a browser', () => { // arrange const component = shallow(<Foo />); // act const result = component.contains(<div className="foo">Bar</div>); // assert expect(result).toBe(true); }); });
Мелкий рендеринг имеет широкий спектр селекторов и функций для поиска узлов. Отключение одного узла за раз позволяет вам утверждать функциональность изолированным способом.
Плюсы:
- мелкий рендеринг изолирует компоненты React
- богатый API для поиска интересующих узлов
- нет необходимости в безголовом браузере
Против:
- адаптеры могут быть опасными при каждом обновлении React
Extreact
- веб-сайт : sencha.com/products/extreact
- хранилище : github.com/sencha/ext-react
- разработчик : Сенча
- текущая версия : 6.7.0
React предлагает компонентный подход к созданию веб-приложений, но сам по себе React не включает никаких компонентов. ExtReact предлагает готовые компоненты, такие как меню, сетки, диаграммы и формы для обеспечения функциональности. Сообщество с открытым исходным кодом большое и доступно много компонентов; Однако борьба с проблемами совместимости между многими библиотеками компонентов и React является сложной задачей. Лучшей идеей является снижение риска путем получения как можно большего количества компонентов из меньшего количества библиотек или, в лучшем случае, из одной библиотеки. ExtReact предлагает наиболее полный набор компонентов в одном профессиональном пакете и включает в себя коммерческую поддержку.
Для начала вам понадобятся Node 8.11+, NPM 6+ и Java 8 & 11. С бесплатной пробной версией вы можете войти в репозиторий NPM по адресу npm.sencha.com . Установите генератор приложений с помощью npm install -g @sencha/ext-react-gen
. Затем создайте приложение с помощью ext-react-gen app killer-app
. Это создает приложение с именем killer-app
. Перейдите в папку проекта и npm start
чтобы запустить приложение React barebones.
Импортировать компоненты ExtReact из пакета ext-react
. Компонент может прийти со своим собственным хранилищем для получения данных. Многие реквизиты доступны с предустановленной функциональностью. Например, onSelect
сообщает компоненту List
что делать при нажатии на элемент списка. Сортировщики доступны для сортировки элементов списка в компоненте.
Допустим, вы хотите импортировать базовый компонент List
:
import React, { Component } from 'react'; import { List } from '@sencha/ext-modern'; export default class BasicList extends Component { store = Ext.create('Ext.data.Store', { autoLoad: true, proxy: { type: 'rest', url: 'data/people.json' }, sorters: ['first_name'] }); tpl = data => ( <div> <div>{data.first_name}</div> </div> ); onSelect = (list, record) => { console.log(`${record.get('first_name')}`); }; render() { return ( <List shadow itemTpl={this.tpl} store={this.store} onSelect={this.onSelect} /> ); } }
ExtReact предлагает более 115 готовых компонентов пользовательского интерфейса с полной коммерческой поддержкой. Компоненты ExtReact предназначены для плавной интеграции в течение всего жизненного цикла приложения.
Плюсы:
- широкий спектр готовых компонентов React
- меньше зависимостей от множества вариантов с открытым исходным кодом
- профессиональные компоненты с коммерческой поддержкой
Против:
- зависимость от Java
React Dev Tools
- сайт : firefox / addon / реагировать-devtools /
- хранилище : github.com/facebook/react-devtools
- Звезды GitHub : 9 000+
- разработчик : Facebook
- текущая версия : 3.6.0
- Авторы: 100+
Инструменты разработчика React позволяют проверять компоненты React прямо в браузере. Он может проверять иерархию компонентов с реквизитом и состоянием. Поставляется как расширение для браузера Chrome и Firefox, а также как отдельное приложение. Пользователи с Opera могут установить расширение Chrome с включенными расширениями Chrome. Значок расширения загорается на веб-сайтах, использующих React, и говорит об открытии инструментов разработчика.
В приложениях React обратите внимание на вкладку React в инструментах разработчика. При нажатии на вкладку отображается иерархия компонентов в древовидном представлении. Компоненты с состоянием показывают кнопку свертывания дерева, которая имеет другой цвет. Вы можете перемещаться по дереву с помощью клавиш со стрелками или hjkl
как с помощью Vim. При щелчке правой кнопкой мыши отображаются такие параметры, как показ на панели элементов, прокрутка в представлении или отображение исходного кода.
Боковая панель дает вам больше понимания каждого компонента. Это позволяет вам вносить изменения в браузере и выделяет эти изменения. Вы можете манипулировать реквизитом и состоянием плюс хранить объекты как глобальную переменную.
Используйте панель поиска, чтобы найти компоненты по названию. Это экономит ваше время, когда в дереве много компонентов. Панель поиска поддерживает регулярные выражения для точного поиска. Один совет — найти компонент с помощью обычного инспектора DOM или вкладки элементов. Выберите элемент со страницы и переключитесь на вкладку «Реагировать». Компонент выбирается в дереве React. При щелчке правой кнопкой мыши есть опция «Найти узел DOM», которая возвращает вас на обычную вкладку.
Плюсы:
- помогает визуализировать компоненты React в дереве
- манипулировать и отлаживать компоненты по желанию
- полезные инструменты поиска, чтобы найти компоненты
Против:
- дополнительное дополнение, но предлагает автономную версию
Redux Dev Tools
- сайт : firefox / addon / reduxdevtools /
- хранилище : github.com/reduxjs/redux-devtools
- Звезды GitHub : 10000+
- разработчик : Луна
- текущая версия : 2.17.1
- Авторы: 70+
Redux Developer Tools поддерживают горячую перезагрузку и повтор действий. Поставляется как расширение для браузера, автономное приложение и компонент React. Компонент React находится внутри хост-приложения. Инструмент позволяет вам проверять каждое состояние и полезную нагрузку. Или вернитесь в прошлое, отменив действия. При внесении изменений в код повторно оцениваются действия, помеченные как поэтапные.
Установите расширение через Интернет-магазин Chrome или дополнения Mozilla. Компонент React доступен для браузеров, которые не поддерживают расширение. Изменения в вашем проекте необходимы для использования расширения. Расширение должно быть настроено в хранилище Redux вместе с опциями расширения.
Например, чтобы настроить Redux Developer Tools с параметрами:
const store = createStore( window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__({ actionCreators, trace: true, traceLimit: 5 }) );
Действия, доступные в Dispatcher, исходят от actionCreators
. Это список функций действия. Импортируйте все интересующие вас действия из проекта в эту переменную. Трассеры будут включать трассировку стека для каждого отправленного действия. Осмотр вкладки трассировки позволяет кликнуть, чтобы перейти в код. Значением по умолчанию для этой опции является false. Ограничение трассировки устанавливает максимальное количество отображаемых кадров стека, по умолчанию оно равно 10.
Применение любого промежуточного программного обеспечения в магазине требует composeWithDevTools
. Получите эту функцию из пакета NPM redux-devtools-extension
. Функция applyMiddleware
входит в эту функцию как параметр. Это позволяет инструменту dev работать вместе с промежуточным программным обеспечением.
Плюсы:
- инструмент для проверки состояния приложения
- отслеживает изменения кода с помощью горячей перезагрузки
- трассировки стека отладки за действие
Против:
- настройка требует изменения кода в проекте
перевождите-неизменно состояние-инвариантное
- веб-сайт : npmjs.com/package/redux-immutable-state-invariant
- хранилище : github.com/leoasis/redux-immutable-state-invariant
- Звезды GitHub : 700+
- разработчик : leoasis
- текущая версия : 2.1.0
- Авторы: 10+
Промежуточное программное обеспечение, которое выдает ошибку при изменении состояния внутри или между диспетчерами. Редукторы предполагают, что аргументы не изменяют состояние. Каждый раз, когда редукторы возвращают состояние, это должен быть новый объект. Хорошей практикой является недопущение изменения состояния вне редуктора. Это требует много дисциплины от программиста. Итак, хорошая идея — автоматизировать эту проверку с помощью инструмента.
Инструмент полезен для выявления ошибок только во время разработки. Он выполняет много объектов копирования для обеспечения неизменности. Это означает высокое потребление памяти, что снижает производительность приложения. По этой причине не включайте этот инструмент в производство. Одной из идей является установка переменной окружения NODE_ENV
, например, на production
.
Чтобы использовать эту библиотеку в качестве промежуточного программного обеспечения:
import { applyMiddleware, createStore } from 'redux'; let middleware = []; // Be sure to ONLY add this middleware in development! if (process.env.NODE_ENV !== 'production') { middleware.push(require('redux-immutable-state-invariant').default()); } const store = createStore( applyMiddleware(...middleware) );
поimport { applyMiddleware, createStore } from 'redux'; let middleware = []; // Be sure to ONLY add this middleware in development! if (process.env.NODE_ENV !== 'production') { middleware.push(require('redux-immutable-state-invariant').default()); } const store = createStore( applyMiddleware(...middleware) );
Если вы не изменяете состояние, инструмент исчезает. Состояние изменения в диспетчере и между диспетчерами и инструментом выдает сообщение об ошибке. Он сохраняет ваши лучшие навыки программирования, как и любой хороший инструмент.
Плюсы:
- бесшовные и работает с любым рабочим процессом
- автоматизирует дисциплину программирования
- выдает ошибки с описательным сообщением
Против:
- большое количество объектов влияет на производительность, но включите это только в dev
перевождь-регистратор
- веб-сайт : npmjs.com/package/redux-logger
- хранилище : github.com/LogRocket/redux-logger
- Звезды GitHub : 4000+
- разработчик : LogRocket
- текущая версия : 3.0.6
- Авторы: 40+
Журнал действий для Redux. Захватывает действия диспетчера в консоли журнала браузера. Поставляется со многими опциями и позволяет понять каждое отправленное действие. По мере того, как действия распространяются по приложению, это захватывает и позволяет детализировать каждое действие. Каждая запись журнала фиксирует как предыдущее и текущее состояние, так и действия диспетчера. Думайте о каждом действии как о сообщении журнала. Регистратор позволяет вам увидеть, как эти сообщения выглядят, когда они меняют состояние в приложении.
Чтобы использовать регистратор, настройте его в хранилище Redux:
import { applyMiddleware, createStore } from 'redux'; // Logger with default options import logger from 'redux-logger'; const store = createStore( applyMiddleware(logger) );
Убедитесь, что регистратор является последним аргументом в applyMiddleware
поэтому он фиксирует действия. Доступны опции для изменения поведения регистратора. Вам нужно будет импортировать createLogger
из createLogger
redux-logger
. Затем вызовите функцию createLogger
с объектом параметров. Например, predicate
указывает функцию, которая вызывается перед каждым действием. Doing (getState, action) => action.type !== UP_COUNT
отфильтровывает действия, которые увеличивают количество. collapsed
опция — это функция, которая возвращает true, если группа журналов должна свернуться. Doing (getState, action) => action.type === DOWN_COUNT
сворачивает типы действий, которые уменьшают количество.
Плюсы:
- захватывает действия диспетчера, такие как сообщения журнала
- позволяет углубиться в каждое действие и проверить состояние приложения
- варианты позволяют настроить то, что захватывается
Против:
- только на стороне клиента, но вы можете отправлять сообщения с небольшим усилием
Вывод
Полезность React заключается в том, что он представляет собой набор инструментов и библиотек, которые хорошо работают. Эти инструменты часто бывают легкими, поэтому вы можете подключать и играть по желанию. Программирование не изобретает колесо, но повторно использует существующие решения, которые работают хорошо. Популярность React проистекает из того, что вы можете выбирать, что решает насущную проблему. Это позволяет сосредоточиться на проблемах, которые еще не имеют хорошего решения.