Чому JSX хороший, коли JSP-сценарії погані?


21

React.js надає JSX як XHTML-синтаксис для побудови дерева компонентів та елементів. JSX компілюється в Javascript, і замість надання циклів або умовних умов у власній JSX, ви використовуєте Javascript безпосередньо:

<ul>
  {list.map((item) =>
    <li>{item}</li>
  )}
</ul>

Я ще не зміг пояснити, чому це вважається хорошим, якщо аналогічні конструкції вважаються поганими в JSP?

Щось подібне в JSP

<ul>
   <% for (item in list) { %>
     <li>${item}</li>
   <% } %>
</ul>

вважається проблемою читабельності, яку потрібно вирішити за допомогою тегів <c:forEach>. Міркування, що стоять за тегами JSTL, також здається, що вони можуть застосовуватися до JSX:

  • трохи легше читати, коли ви не перемикаєтесь між синтаксисом, схожим на XHTML (кутові дужки, вкладені) та Java / Javascript (фігурні, коми, парен)
  • коли у вас є доступна повна мова та платформа для використання всередині функції візуалізації, то менше, щоб не відштовхувати вас від введення логіки в ту, що їй не належить.

Єдині причини, з яких я можу подумати, чому JSX відрізняється, це:

  • в Java у вас був стимул зробити неправильну справу - JSP буде перезавантажений, тому було спокусливо вводити код у JSP, щоб уникнути циклу відновлення / перезавантаження. Технічне обслуговування було принесено в жертву для негайної продуктивності. Поглинання сценаріїв та обмеження на фіксований набір конструкцій шаблонів було ефективно способом забезпечення ремонту. Такого спотворення в світі JS не існує.

  • Синтаксис JSP та Java є незграбним із додатковою <% ... %>можливістю відрізняти код Java від генерації елементів, а в рідному синтаксисі Java відсутня foreachконцепція або першокласні функції (до недавнього часу). Синтаксичне покарання використання нативної Javascript для циклів і умовних умов у JSX не нульове (на мою думку), але не таке вже й погане, як JSP, і, мабуть, недостатньо погано, щоб гарантувати введення специфічних для JSX елементів для циклів та умовних умов.

Чи ще чогось мені не вистачає?


1
Я не думаю, що погано мати петлі у своєму JSP, проблема полягає у вкладанні коду у теги сценаріїв. Якщо ви забороните їх і використаєте JSTL, тоді ви будете змушені спростити свої JSP. Крім того, як ви зазначаєте, додатковим бонусом є те, що синтаксис JSTL є трохи меншим, ніж синтаксис сценарію. Хоча я не знайомий з JSX, я здогадуюсь, що ви, мабуть, могли б зловживати фрагментами JSX з великою кількістю суперечливих логік, які не рекомендували б, але це не завадить.
PhilDin

Відповіді:


11

Перш за все, люди, які створили JSX, не погодилися з людьми, які не любили JSP. Дивіться їхню дискусію тут: Чому ми побудували React? а також відображення даних

Шаблони базуються на ідеї створення поділу між логікою та презентацією сторінки. З цієї теорії ваш код JavaScript (або java) не повинен стосуватися того, яка розмітка відображається, і ваша розмітка не повинна стосуватися жодної логіки. Цей підрозділ, по суті, критикує різні мови шаблонів, які легко дозволяють змішувати код із вашим шаблоном (PHP / JSP / ASP).

Реакція заснована на компонентах. Автори реакції стверджують, що логіка та подання компонента тісно пов’язані між собою, і спроба їх розділити не має жодного сенсу. Натомість сторінку слід розбити логічними фрагментами. Таким чином, ви можете розбити рядок заголовка, коментарі, повідомлення, відповідні питання тощо на окремі компоненти. Але не має сенсу намагатися розділити логіку щодо пов'язаних питань із презентацією.

Основна відмінність між чимось на зразок JSX і чимось на зразок JSP полягає в тому, що JSP - це шаблон шаблону, який включає трохи Java для логіки. JSX - це javascript з розширенням синтаксису для полегшення побудови фрагментів html. Акцент різний. Оскільки JSX використовує цей підхід, він в кінцевому підсумку створює приємніший і чистіший підхід, який здійснюють JSP або друзі.

Але в кінцевому підсумку зводиться до того, що люди, які реагували, не любили шаблони. Вони вважають, що це погана ідея, і ви повинні розмістити свою логіку розмітки та презентації там же.


Я не скаржуюся на інкапсуляцію renderфункції там же, що й інша складова логіка. Я чітко переймаюся читабельністю змішування генерації елементів з іншими видами коду.
wrschneider

@wrschneider, чим відрізняється renderфункція реакції у змішаному типі коду, ніж ваша типова мова шаблону?
Вінстон Еверт

3

Як аутсайдер React, я розглядав JSX як ще один "фреймворк" у дуже переповненому зоопарку смердючих рамок. Я досі не переконаний, що це не так.

Я думаю, що правильним визначенням "корисного" є те, що бібліотека / рамка / шаблон вирішує більше проблем, ніж викликає. Я ще не впевнений, що JSX відповідає цьому визначенню. Це поспішне "стискання повітряної кулі" ... ти тут стискаєш проблему, вона вискакує там. Для мене JSX не вирішує жодної конкретної проблеми ... це лише просто "інше".

Поняття про введення компільованої семантики, яка потребує формалізованого процесу збирання, є корисною в деяких обставинах: наприклад, менша компіляція файлів .css забезпечує деяку дуже потрібну структуру навколо css, яка є ієрархічною структурою з імпортом та заміщенням, таким чином. будучи дуже схильним до «спагеті-рішень». Але попередніх компіляторів Javascript ... не так багато.


"Працездатне визначення корисного є ...", що є чудовим моментом. І так, JSX вирішує більше проблем, ніж ми думаємо. Компонент React view є більш простим і виразним з JSX. це може бути одиниця, що перевіряється з неглибоким відображенням. Якщо ви скажете, що запах JSP може пахнути, і це більше шансів помилок. І я не агнест jsp.
Сагар

Вибачте, але я не бачу, як це відповідає на питання.
sleske

Sleske, прихильники літературознавства назвали б це питання "всередині читання". Питання на поверхні вимагає порівняння, але зсередини - про рамки. Моя відповідь стосується поняття "рамки, що вирішують більше проблем, ніж вони викликають". Тоді ОП може прийняти мій коментар, застосувати це кредо до його конкретної, унікальної ситуації та вирішити, чи є JSX допомогою чи перешкодою. Можна сказати, що у вашій заяві виникає питання, чи є недолік у відповіді чи недолік у вашому розумінні, оскільки будь-яка проблема може спричинити ваш точний результат
dwoz

1

Коротко:

  • Очікується, що розробники переднього плану знають сценарії та шаблони
  • JSX і JSP - обидва шаблонні мови
  • JavaScript - це сценарій мови
  • Java - це не сценарій мови

Список літератури


0

Хоча я не використовую JSX, грунтуючись на вашому описі, завданням фрагмента JSX є представлення даних, тобто це компонент перегляду в мові MVC. Фрагмент JSX, імовірно, не знає і не цікавить, звідки надходили дані, які ви хочете.

Добре структурована сторінка JSP просто міститиме директиви JSTL, як ви згадуєте. Директиви JSTL просто спрощують ваші JSP-програми, щоб вони не захаращувались витягненням з області дії, перевіряють наявність нуля тощо.

Так само, як фрагмент JSX; єдиним завданням ССП має бути розібратися, як представити отримані дані, не переживаючи, звідки вони надійшли.

Підсумовуючи, чи є ваш погляд JSX чи JSP, якщо ви робите це належним чином, то ваш погляд буде просто представляти дані.

Щодо того, чому ви можете перенести презентацію на клієнта, а не робити це на сервері, це дає вам більше гнучкості. Ваш веб-сайт може отримувати свої дані через веб-сервіси (наприклад, ReST) та бути лише іншим клієнтом. Якщо згодом ви вирішите, що вам потрібно вбудований додаток для Android або iOS, вони можуть споживати той самий набір веб-служб, що і ваш веб-сайт.


Зауважте, що JSX можна використовувати на стороні клієнта або на сервері. Модний спосіб використання JSX - зробити початкові елементи керування на сервері, а потім виконати оновлення DOM (у відповідь на дзвінки служби) на стороні клієнта. У будь-якому випадку ви вірні, що React є шаром перегляду ( цитуючи Facebook : "Багато людей використовують React як V в MVC").
Брайан

Конкретне питання полягає в тому, чому React / JSX вважає, що добре використовувати нативний синтаксис Javascript для циклів / умовних умов, тоді як JSP усунув власний синтаксис Java (скрипти).
wrschneider

Вибачте, я пропустив цей момент. Я почав складати відповідь, але потім зрозумів, що це просто випадок "ваша здогадка така ж добра, як і моя". Гарний синтаксис шару презентації для JSX може бути корисним, можу лише припустити, що це було важливо для дизайнерів Java, а не для дизайнерів JSX.
PhilDin
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.