Много было написано о крутой кривой обучения 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 или инструмент командной строки, который, кажется, волшебным образом делает все за меня. Но я не из тех людей, которым комфортно с магией, когда я вышел из стадии новичка.

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

Что происходит, когда вы вводите foo.com в браузере? Тогда что происходит? Что тогда происходит? Я задаю этот вопрос не потому, что меня волнует, как глубоко вы можете зайти; Я спрашиваю, потому что мне небезразлично, насколько глубоко вы заботитесь зайти. Где заканчивается ваш интерес? Как вы ДУМАЕТЕ, как это работает? Где заканчиваются технологии и где начинается магия (для вас)? HTTP? ПТС? ДНС? Напряжение на проводе? Регистрируется в чипах? Квантовые эффекты?
— «Скотт Гензельман

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

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

Если вы знаете, что вам нужны redux, redux-thunk, react-router и redux-form, поиск Starter Kit поможет вам найти стартовый набор, который включает их.

Но что делать, если у вас есть такие вопросы, как:

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

Повторяю: я новичок в React. Я, скорее всего, скажу что-то просто неправильное. Я передумаю. Я неправильно понимаю концепцию или назначение библиотеки. Это жизнь разработчика.

Я приветствую ваши мысли и с нетерпением жду возможности поучиться у вас!