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 елементів для циклів та умовних умов.
Чи ще чогось мені не вистачає?