A simple, easy to use library for React development in ClojureScript.
(ns my-app.core
(:require [hx.react :as hx :refer [defnc]]
[hx.hooks :as hooks]
["react-dom" :as react-dom]))
;; `defnc` creates a function that takes a props object and returns React
;; elements. You may use it just like any normal React component.
(defnc MyComponent [{:keys [initial-name]}]
;; use React Hooks for state management
(let [[name update-name] (hooks/useState initial-name)]
[:<>
[:div "Hello "
[:span {:style {:font-weight "bold"}} name] "!"]
[:div [:input {:on-change #(update-name (-> % .-target .-value))}]]]))
(react-dom/render
;; hx/f transforms Hiccup into a React element.
;; We only have to use it when we want to use hiccup outside of `defnc` / `defcomponent`
(hx/f [MyComponent {:initial-name "React in CLJS"}])
(. js/document getElementById "app"))
You'll want to make sure you have the latest version of react
, react-is
, and
whatever renderer you are targeting (e.g. react-dom
).
npm i react react-is react-dom
If you want to use the React Hooks API (hx.hooks
), you'll need to ensure
you are using React 16.8 or later.
hx
solve?hx
is meant to make it simple, easy and fun to use React.js
within ClojureScript. It is your bridge to the wide world of React.js in
idiomatic CLJS.
The library is split into (currently) three sections, which you can feel free to mix as your project sees fit:
A hiccup interpreter. Takes in [:div {:style {:color "red"}} [:span "foo"]]
and
spits out React.createElement
calls.
Helpers for creating components. defnc
and defcomponent
help us write
plain React.js components in idiomatic ClojureScript.
Helpers for using React Hooks.
hx
not solve?No opinionated state management, no custom rendering queue. Use it to build
your awesome opinionated async reactive immutable app framework. hx
is just
a Clojure-y interface to creating plain, unadulterated React components.
Interop:
Copyright © 2018 Will Acton
Distributed under the MIT license.
Can you improve this documentation?Edit on GitHub
cljdoc is a website building & hosting documentation for Clojure/Script libraries
× close