Много было написано о крутой кривой обучения React. В некоторой степени проблема заключается в том, что React и Flux/Redux переворачивают ортодоксальность MVC с ног на голову. Однако я думаю, что большая часть трудностей связана с тем, что «React» — это сокращение для десятков библиотек и инструментов, необходимых для создания реального приложения.
Разработчики, которые какое-то время были погружены в мир React, могут не осознавать, сколько общих знаний они приобрели по пути, и предполагать, что все знают. В файлах README и примерах проекта часто содержится немного больше, чем эта библиотека похожа на X, но немного отличается. Изучение React иногда может показаться бесконечной экспедицией по бритью яков.
Даже если вы полностью разбираетесь в webpack, nodejs, express, es6, babel, mocha, sass/less и т. д., для создания нетривиального приложения в React, скорее всего, потребуется дюжина или более специфичных для React библиотек и инструментов. Каждый из них относительно прост сам по себе, но объединение их в реальное приложение — нет.
Должен сказать, что я полностью за тенденцию перехода от больших фреймворков к небольшим компонуемым библиотекам. Мне нравится, что экосистема React представляет собой набор небольших библиотек.
Парадокс выбора
Тем не менее, экосистема React все еще молода и быстро меняется. Есть десятки, если не сотни, небольших библиотек, которые нужно открыть и изучить. Для решения какой-либо конкретной задачи вы можете найти две, пять или двадцать библиотек, решающих ее по-разному. И большинство из них постоянно меняются. Несовместимость версий везде.
Выбор — это хорошо, но парадокс выбора становится тяжелым бременем, когда вы смотрите на пустой файл `project.json`.
Появились стартовые наборы, чтобы помочь вам быстрее приступить к работе. Для хорошо выполненных требуется немного больше, чем:
git clone npm install npm start
Но даже с этими руками-помощниками парадокс выбора остается: стартовых наборов так много, что есть еще и Инструмент поиска стартовых наборов React. На момент написания этой статьи (июль 2016 г.) он содержит 94 записи.
Магия и понимание
Я люблю хороший шаблон так же, как люблю хорошую IDE или инструмент командной строки, который, кажется, волшебным образом делает все за меня. Но я не из тех людей, которым комфортно с магией, когда я вышел из стадии новичка.
Я хочу знать точно, что мои инструменты делают для меня. Если я этого не сделаю, я не узнаю, когда инструмент больше не подходит для моей ситуации или когда я использую его потенциально опасным образом. Я не смогу найти разумный компромисс между производительностью и удобством или между написанием/тестированием/поддержкой пользовательского кода и зависимостью от чего-то, что я не могу контролировать.
Итак, у нас есть десятки отличных руководств по началу работы с React. И у нас есть несколько отличных стартовых наборов, каждый из которых содержит один возможный набор совместимых библиотек, связанных с React. Но кто-то другой определил, какие библиотеки включены.
Чего я не нашел, так это руководства, которое поможет разработчикам — особенно новичкам в React, таким как я, — принимать собственные решения о том, от каких библиотек брать зависимости.
Если вы знаете, что вам нужны redux, redux-thunk, react-router и redux-form, поиск Starter Kit поможет вам найти стартовый набор, который включает их.
Но что делать, если у вас есть такие вопросы, как:
- Как работает redux-thunk и почему я должен выбрать его вместо redux-promise, redux-async, redux-await, redux-async-connect, react-fetcher или реактивный резольвер? Или я использую его в сочетании с одним из них?
- Могу ли я использовать react-bootstrap и redux-form вместе? В каких версиях?
- Должен ли я использовать flux-standard-action, redux-actions, redux-standard-actions или ничего из вышеперечисленного?
- Когда у меня возникает проблема, о которой я знаю, что она уже решалась ранее, как мне обнаружить в настоящее время популярные варианты и не тратить время на выяснение того, какие из них были заброшены?
Это те вопросы, которые я планирую обсудить в процессе обучения за последние пару месяцев. Конечно, я не могу решить, что лучше в вашей ситуации. Но я попытаюсь объяснить фокусы, обсудить компромиссы, которые вам, возможно, придется рассмотреть, и предупредить о текущих болевых точках и несовместимостях.
Повторяю: я новичок в React. Я, скорее всего, скажу что-то просто неправильное. Я передумаю. Я неправильно понимаю концепцию или назначение библиотеки. Это жизнь разработчика.
Я приветствую ваши мысли и с нетерпением жду возможности поучиться у вас!