Idiomatic ClojureScript interface to modern React.js
"Oh god, I just started learning reagent. Don’t tell me I’ll have to switch" /r/clojure
- API compatibility: React v18.3.1
- UIx v1 is in roman01la/uix repo
- Discuss at #uix on Clojurians Slack
- A slide deck explaining UIx and migration path from Reagent
npm install react@18.3.1 react-dom@18.3.1 --save-dev
{:deps {com.pitch/uix.core {:mvn/version "1.1.1"}
com.pitch/uix.dom {:mvn/version "1.1.1"}}}
- Run
npx create-uix-app@latest my-app
to scaffold a new project - Clone starter template manually from pitch-io/uix-starter
(ns my.app
(:require [uix.core :refer [defui $]]
[uix.dom]))
(defui button [{:keys [on-click children]}]
($ :button.btn {:on-click on-click}
children))
(defui app []
(let [[state set-state!] (uix.core/use-state 0)]
($ :<>
($ button {:on-click #(set-state! dec)} "-")
($ :span state)
($ button {:on-click #(set-state! inc)} "+"))))
(defonce root
(uix.dom/create-root (js/document.getElementById "root")))
(uix.dom/render-root ($ app) root)
- What is UIx?
- Components
- Elements
- Hooks
- State
- Effects
- Props validation
- Interop with React
- Interop with Reagent
- Code-splitting and React.lazy
- Migrating from Reagent
- Server-side rendering
- Hot reloading
- React DevTools
- Code linting
- Differences from Reagent
- Utilities
- Examples
- Internals
- Other render targets
- Getting help from ChatGPT
scripts/test
Note: to ensure you're using the right Node.js version, you can use nvm and run nvm use
once in the directory. Otherwise the Node.js version you use is in the .nvmrc
file. See nvm repo for more documentation.
- Update version in core/release.edn, dom/release.edn and in README.md
- Update docs if needed
- Update CHANGELOG.md
- Publish both
core
anddom
packages to Clojars
cd core && CLOJARS_PASSWORD={YOUR_CLOJARS_TOKEN} clj -A:release --skip-tag
cd dom && CLOJARS_PASSWORD={YOUR_CLOJARS_TOKEN} clj -A:release --skip-tag