Documentos de Académico
Documentos de Profesional
Documentos de Cultura
#clojurescri
pt
Tabla de contenido
Acerca de 1
Observaciones 2
Examples 2
Instalación o configuración 2
Leiningen 2
Linux: 2
OS X: 2
Windows: 2
Conectando a un REPL 2
Expresiones de gratitud 3
Introducción 4
Examples 4
Átomos Reactivos 4
Sintaxis 6
Observaciones 6
Examples 6
Introducción 8
Examples 8
Capítulo 5: lein-cljsbuild 10
Observaciones 10
Examples 10
Observaciones 12
Examples 12
Creditos 13
Acerca de
You can share this PDF with anyone you feel could benefit from it, downloaded the latest version
from: clojurescript
It is an unofficial and free clojurescript ebook created for educational purposes. All the content is
extracted from Stack Overflow Documentation, which is written by many hardworking individuals at
Stack Overflow. It is neither affiliated with Stack Overflow nor official clojurescript.
The content is released under Creative Commons BY-SA, and the list of contributors to each
chapter are provided in the credits section at the end of this book. Images may be copyright of
their respective owners unless otherwise specified. All trademarks and registered trademarks are
the property of their respective company owners.
Use the content presented in this book at your own risk; it is not guaranteed to be correct nor
accurate, please send your feedback and corrections to info@zzzprojects.com
https://riptutorial.com/es/home 1
Capítulo 1: Empezando con clojurescript
Observaciones
ClojureScript es una versión de Clojure que se compila en código javascript y se ejecuta en el
navegador.
Si bien es casi lo mismo que Clojure, hay algunas diferencias (principalmente, carece de algunas
llamadas de API que invocan funciones de Java que no están disponibles en JavaScript)
Examples
Instalación o configuración
Leiningen
Nota: Si va a utilizar Leiningen, primero debe descargar e instalar JDK 6 o más reciente.
La forma más fácil de comenzar con Clojure es descargar e instalar Leiningen, la herramienta
estándar de facto para administrar proyectos de Clojure.
Linux:
OS X:
Siga los pasos de Linux arriba o
Windows:
Consulte https://github.com/technomancy/leiningen#installation .
Conectando a un REPL
https://riptutorial.com/es/home 2
Una vez que tengas instalado lein , ejecuta
lein repl
Presiona F12
Hello world!
Expresiones de gratitud
• El extraordinario trabajo de David Nolen en ClojureScript.
https://riptutorial.com/es/home 3
Capítulo 2: Empezando con Reactivo
Introducción
Reagent es una biblioteca que implementa elementos de React.js en ClojureScript, como las
creaciones de "etiquetas" personalizadas, que se implementan en Reagent a través de funciones.
Examples
Átomos Reactivos
Los átomos de reactivos son esencialmente iguales a los átomos regulares en Clojure y
ClojureScript; son esencialmente variables que pueden alterarse. Esto es especialmente útil, ya
que los tipos de datos de Clojure (Script) son en su mayoría inmutables, lo que significa que para
cambiar el valor de una variable, la variable debe ser redeclarada.
Los átomos normales son incompatibles con el Reactivo, por lo que el Reactivo tiene el suyo
propio. Se declaran como variables normales, excepto con una función adicional envuelta
alrededor del valor:
• swap! se da comandos, cambia el valor del átomo en función del valor original del átomo en
sí
• reset! recibe un valor, y cambia el valor del átomo al valor dado, independientemente de lo
que el átomo fue originalmente
Reactivo es una interfaz entre ClojureScript y reacciona. Le permite definir componentes React
eficientes usando nada más que funciones y datos sencillos de ClojureScript, que describen su UI
utilizando una sintaxis similar a Hiccup.
Ejemplo:-
https://riptutorial.com/es/home 4
(defn sample-component []
[:div
[:p "I am a component!"]
[:p.someclass
"I have " [:strong "bold"] "text."]])
Salida:
Soy un componente!
https://riptutorial.com/es/home 5
Capítulo 3: Eventos de JavaScript
Sintaxis
• (goog.events dom-element event-type event-handler-function) ;; crea un detector de eventos
de Google Closure
• (.addEventListener dom-element load-event) ;; crea un detector de eventos de JavaScript
normal. Puede ser específico del navegador.
Observaciones
Todos los nombres de eventos de cierre se pueden encontrar en su documentación en la
enumeración de EventType .
Examples
Agregar evento al botón usando la biblioteca de cierre
(ns so-doc.events
(:require
[goog.dom :as dom]
[goog.events :as events]))
(events/listen
(dom/getElement "button"); This is the dom element the event comes from
(.-CLICK events/EventType); This is a string or array of strings with the event names.
;;All event names can be found in the EventType enum
handle-click ;function that should handle the event
)
Google Closure no admite eventos de carga de página y considera que no son idiomáticos.
Recomiendan insertar scripts en línea tan pronto como el contenido al que acceden se haya
cargado.
(ns so-doc.events)
(enable-console-print!)
(defn click-event []
(println "Button clicked"))
(defn load-event []
(println "Page loaded!")
https://riptutorial.com/es/home 6
(.addEventListener (.getElementById js/document "btn") "click" click-event false))
Como el Javascript normal, este método requiere un manejo específico del navegador. Esto no
funcionará en Internet Explorer, por ejemplo.
https://riptutorial.com/es/home 7
Capítulo 4: Gestión de estado con re-frame
(https://github.com/Day8/re-frame)
Introducción
Empieza a ser difícil cuando pensamos que clojurescript es un lenguaje funcionalmente puro, que
mantiene el estado de los componentes de la interfaz de usuario. Es simplemente imposible.
Sin embargo, es posible separar los componentes individuales así como sus estados. Podemos
hacerlo almacenando datos / estado en reactivo / átomo. Pero cuando hay muchos estados y
muchas dependencias, las cosas se vuelven confusas rápidamente y empezamos a desear una
solución inmediata para nuestra administración estatal. Aquí es donde entra el nuevo marco.
Examples
1. Evento simple de despacho
(ns myapp.events
(reg-event-db
:enable-feature-toggle
Esto está creando un evento llamado :enable-feature-toggle que creará una entrada en db
{:global {:enable-feature-toggle true}} . Un db es como una tienda global para preservar los
resultados del evento. Luego, estos resultados se pueden suscribir y utilizar para modificar el
estado del elemento como veremos en el ejemplo de Evento de suscripción simple .
Después de crear el evento, realmente tenemos que enviar el evento a algún lugar de nuestro
código / componentes de la interfaz de usuario para hacer un uso del mismo. Por ejemplo, si
queremos realizar alguna acción al hacer clic en un div, podemos disparar un evento de clic.
(ns myapp.components.page-header
(:require [myapp.events]
[re-frame.core :refer [dispatch]]))
https://riptutorial.com/es/home 8
(defn cljs-header []
[:div {:class "cljs-header"
https://riptutorial.com/es/home 9
Capítulo 5: lein-cljsbuild
Observaciones
Más detalles sobre los parámetros para lein-clsjbuild se pueden encontrar en su proyecto de
ejemplo .
Examples
Desarrollo y producción de ClojureScript.
:cljsbuild {
:builds {
;;Different target goals should have different names.
;;We have the dev build here
:dev {
;;The ClojureScript code should reside in these directories
:source-paths ["src-cljs"]
:compiler {
;;This is the target output file
;;This will include none of the goog code.
:output-to "resources/public/js/main.js"
;;This stores the compilation files, including goog files.
;;When using this dev profile, you should add "<script
src="/js/goog/base.js>" to your html files.
;;That will load the goog dependency.
:output-dir "resources/public/js/out"
;;Having optimizations off is recommended for development
;;However this means you have to add the goog dependencies
yourself (see above)
:optimizations :none
;;With no optimizations, marking this true, means it adds
a source map so you can debug in browser
:source-map true
}
}
:prod {
:source-paths ["src-cljs"]
:compiler {
;;Outputs the javascript file to this path.
:output-to "resources/public/js/main.js"
;;Advanced optimizations make your code smaller.
;;They include the goog code in your main file.
;;No need to add an extra script tag.
:optimizations :advanced
:jar true
}
}
}
}
https://riptutorial.com/es/home 10
Para ejecutar estos comandos de compilación, use lein cljsbuild once . Puede especificar qué
perfil usar al agregar el nombre del perfil como el último argumento, por ejemplo, lein cljsbuild
once dev para compilar con los parámetros dev.
El uso de lein cljsbuild auto hará que cljsbuild actualice automáticamente los archivos
modificados.
https://riptutorial.com/es/home 11
Capítulo 6: Rueda de higo
Observaciones
Figwheel reconstruye automáticamente su código clojurescript cuando los archivos de origen
cambian y vuelve a cargar el código en el navegador. Recargar funciona sin actualizar la página y
puede preservar parte del estado de la aplicación entre recargas usando defonce .
Es una alternativa al desarrollo basado en REPL (aunque también incluye REPL). En lugar de
reevaluar las funciones modificadas en REPL, vuelve a cargar todo el código y puede usar println
para ver el resultado de la evaluación de expresiones en la consola js del navegador.
Examples
Creando un Nuevo Proyecto
Ejecutar Figwheel:
cd hello-world
lein figwheel
También abre un REPL Clojurescript conectado al navegador. Intente ingresar (js/alert "Test") :
debería ver una alerta emergente en el navegador.
https://riptutorial.com/es/home 12
Creditos
S.
Capítulos Contributors
No
Empezando con
1 Community, hawkeye, Matt W-D, Zain Rizvi
clojurescript
5 lein-cljsbuild DonyorM
https://riptutorial.com/es/home 13