javascript – ¿Por qué JSX es bueno cuando los scriptlets JSP son malos?

Pregunta:

React.js proporciona JSX como una sintaxis similar a XHTML para construir un árbol de componentes y elementos. JSX se compila en Javascript y, en lugar de proporcionar bucles o condicionales en JSX propiamente dicho, utiliza Javascript directamente:

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

Lo que no he podido explicar todavía es, ¿por qué esto se considera bueno si las construcciones análogas se consideran malas en JSP?

Algo como esto en JSP

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

se considera un problema de legibilidad que debe resolverse con etiquetas como <c:forEach> . El razonamiento detrás de las etiquetas JSTL también parece que podrían aplicarse a JSX:

  • es un poco más fácil de leer cuando no alterna entre una sintaxis similar a XHTML (corchetes angulares, anidamiento) y Java / Javascript (curlies, comas, parens)
  • cuando tiene el lenguaje y la plataforma completos disponibles para usar dentro de la función de renderizado, hay menos que lo desanime de poner lógica que no pertenece allí.

Las únicas razones por las que puedo pensar por qué JSX es diferente son:

  • en Java, tenía un incentivo para hacer lo incorrecto: JSP se recargaría en caliente, por lo que era tentador poner código en JSP para evitar un ciclo de reconstrucción / reinicio. La mantenibilidad se sacrificó por la productividad inmediata. Desterrar los scriptlets y limitar a un conjunto fijo de construcciones de plantillas era efectivamente una forma de hacer cumplir la mantenibilidad. No existe tal distorsión en el mundo JS.

  • La sintaxis JSP y Java es torpe con el <% ... %> adicional para distinguir el código Java de la generación de elementos, y con la sintaxis nativa de Java que carece de un concepto foreach o funciones de primera clase (hasta hace poco). La penalización de sintaxis de usar Javascript nativo para bucles y condicionales en JSX no es cero (en mi opinión) pero no es tan mala como JSP, y posiblemente no es lo suficientemente mala como para justificar la introducción de elementos específicos de JSX para bucles y condicionales.

¿Hay algo más que me esté perdiendo?

Respuesta:

Principalmente, las personas que crearon JSX no estaban de acuerdo con las personas a las que no les gustaba JSP. Vea su discusión aquí: ¿Por qué creamos React? así como mostrar datos

Plantillas se basa en la idea de crear una división entre la lógica y la presentación de una página. Según esta teoría, su código javascript (o java) no debería preocuparse por el marcado que se muestra, y su marcado no debería preocuparse por la lógica involucrada. Esta división es esencialmente la razón por la que la gente critica los diversos lenguajes de plantilla que permitían fácilmente mezclar código con su plantilla (PHP / JSP / ASP).

React se basa en componentes. Los autores de react argumentan que la lógica y la presentación de un componente están estrechamente conectadas y que intentar dividirlos no tiene ningún sentido. En cambio, una página debe estar dividida por piezas lógicas. Por lo tanto, puede dividir la barra de encabezado, los comentarios, las publicaciones, las preguntas relacionadas, etc. en componentes separados. Pero no tiene sentido tratar de dividir la lógica de las preguntas relacionadas de la presentación.

La principal diferencia entre algo como JSX y algo como JSP es que JSP es un lenguaje de plantilla que incluye un poco de Java para la lógica. JSX es javascript con una extensión de sintaxis para facilitar la construcción de fragmentos de html. El énfasis es diferente. Dado que JSX adopta este enfoque, termina produciendo un enfoque más agradable y más limpio que JSP o amigos.

Pero en última instancia, todo se reduce al hecho de que a las personas que reaccionaron no les gustaron las plantillas. Piensan que son una mala idea y que debes poner el marcado y la lógica de presentación en el mismo lugar.

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım