Я не доволен Redux, но я не пишу длинный пост, пытаясь раскрыть темную сторону Redux. Люди хвалят Redux. Как мы все знаем, он исходил от Вяза, а ранее это может быть из выступлений Брета Виктора. Пришло время отладчика, путешествующего во времени. Как и все разработчики, я хочу, чтобы создавать приложения стало проще и быстрее. Redux делает вещи намного лучше. Что меня расстроило, так это то, что я обнаружил, что на ClojureScript все может быть проще и красивее. Хотя в Redux есть некоторые концепции, которые даже более странны, чем в Elm, это очень странно.

Итак, немного обо мне. Я работаю в Шанхае и работаю над React около 2 лет. Раньше я писал на CoffeeScript, а последние месяцы - на ClojureScript. Я также пытался реализовать что-то самостоятельно, например, крошечную копию Redux под названием actions-recorder, крошечный компонент, похожий на redux-router, под названием router-view, виртуальную библиотеку MVC на основе DOM в ClojureScript под названием Respo. . Мои поделки могут быть медленнее и нестабильнее по сравнению с известными библиотеками. Я проработал в React достаточно долго, чтобы понять, чем React хорош, а что его сокращает.

По сравнению с моими крошечными кусочками, Clojure знает намного больше людей, это диалект Лиспа, работающий на JVM. А ClojureScript - это Clojure, скомпилированный и работающий на JavaScript. Возможно, вы много слышали о ClojureScript в сообществе React, когда говорили о неизменяемой структуре данных, вдохновленной Om, привязкой ClojureScript для React.js.

  • Итак, вам нужна неизменная структура данных, хорошо, она встроена в ClojureScript.
  • Вы хотите, чтобы каждая вещь была выражением, поэтому вы можете использовать «if» и «switch» напрямую, не вводя «a? B: c» или «return», хорошо, это ClojureScript.
  • Вам нужна горячая замена кода, ClojureScript поддерживает это лучше, чем JavaScript.
  • Вам нужен эмиттер, чтобы библиотека знала об обновлениях в магазине, хорошо, это то, что Atom делает в ClojureScript.
  • Вы не хотите всегда связывать «это», это хорошо, «это» не существует в повседневном коде ClojureScript.

Все выше. Я просто превратил их в список для поиска.

Есть еще кое-что. Мы все знаем Лисп, поскольку он является источником функционального программирования, и многие из нас все еще работают после него. Clojure - это больше, чем Lisp. Структура данных в Clojure неизменна, как Haskell и как Elm. Возможно, вы слышали о «reset!», В Clojure ссылки могут быть изменяемыми, но значение никогда не может изменяться, и с помощью «reset» вы можете изменить ссылку на Atom. Так что он более функциональный и более ограниченный. Пока мы говорим о чистых функциях, неизменяемом хранилище и состояниях, React все больше и больше охватывает классы ES6 и Redux. Я не говорю, что это неправильное направление, но JavaScript становится запутанным языком, не так ли?

Хорошая часть не является оригинальной, а оригинальная часть не является хорошей.

JavaScript - это язык, в котором смешаны функции Scheme, Self, Java, C # и др. Может быть, я смогу добавить XHP благодаря JSX. Хранить их все в одном месте может быть рискованно.

Clojure отличается от JavaScript. Он разработан тщательно, а не дорабатывается за несколько недель, и в него не добавляются новые синтаксисы каждый месяц. По умолчанию он включает статический анализ, а не вызывает множество ошибок времени выполнения. Он поддерживает пакеты с Clojars, а не с несколькими инструментами, такими как RequireJS Bower, npm и CDN. Он устраняет ад обратных вызовов с помощью каналов в библиотеке, а не 3 новых метода, называемых Promise, Generator и Async с 3 разных языков.

Сравнивая два сообщества, они оба поддерживают React и горячую замену кода, оба работают в браузерах и Node.js, оба компилируются и запускаются. Я обнаружил, что JavaScript настолько сумасшедший и кардинально изменился. Так почему же JavaScript так сумасшедший, в то время как ClojureScript стабилен, но имеет такие функции, как мы в сообществе React.js с таким небольшим количеством разработчиков? Почему JavaScript становится таким сложным, пытаемся ли мы решить простые проблемы с самого начала?

С моей стороны, JavaScript продвигается, индустрия подталкивается, крупные компании, такие как Google и Facebook, к лучшей экосистеме, более надежной, более производительной, пока это все еще JavaScript, но чего бы это ни стоило. Усложняется? Что ж, люди могут этому научиться. Беспорядок? Потратьте больше времени и разберитесь в этом. Всегда есть решения.

Но я устаю после 4 лет изучения JavaScript (с самого начала: friendly-smile :). Пришло время выбрать новый язык. Для меня это Clojure. На работе до сих пор пишу ES6 для нашей компании. Но Clojure для моих открытых проектов.

Позвольте мне вернуться к Redux. Redux - это почти то же самое по сравнению с ClojureScript. Я просто сказал, что пока вы используете Clojure, вы можете по умолчанию:

  • значения (которые неизменны)
  • Атомы (уже эмиттер можно «добавить-смотреть»)
  • чистые функции для обновления магазина (здесь основные функции - «получить», «обновить», «связать»)

так что у вас уже есть части Redux. Насколько я понимаю, это может быть довольно дешево, почему это так дорого в Redux? Нам нужны «reducer», «combReducer», «Provider», «middleware». Это сложно.

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

Я прочитал исходный код Redux полгода назад, когда собирал программу действий. Не читаю это последние месяцы. Я также не изучал весь исходный код React в деталях, а просто читал некоторые альтернативы, такие как deku, diffhtml и inferno. Я пишу этот пост в надежде, что веб-платформа станет более милой для нас, разработчиков. И я очень надеюсь, что JavaScript не сойдет с ума.

Кстати, я всегда держу пари, что WebAssembly убьет JavaScript. Вряд ли это может быть правдой, но я на это надеюсь.