Skip to content

Latest commit

 

History

45 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

* ktoa

Set of useful helpers and wrappers around React Native for
ClojureScript development

** Example

#+BEGIN_SRC clojure

(ns app.core
  (:require [ktoa.components :refer [component] :as c]
            [ktoa.core :refer [run-app!]]))

(def child
  (component
   {:render #(this-as that
               (c/text nil that.props.title))}))

(def parent
  (component
   {:render (fn[](this-as that
                  (c/view {}
                    (child {:title that.props.title})
                    (map #(c/text {:key %} %) (range 20)))))}))

;; Feel free to reeval following line - ktoa will refresh application
(run-app! "app" parent {:title "\n\nHello"})

#+END_SRC

** API

*** ktoa.core

- ~react-native~ - Returns required ~react-native~ module
- ~react~ - Returns required ~react~ module
- ~os~ - Returns nil for non react-native environments or ~:ios~ or
  ~:android~ depending on current platform
- ~run-app!(app-name component override-props)~ - If application
  wasn't mounted before - simply register it, otherwise rerun it with
  (optionally) supplied arguments. Usefull for REPL driven
  development - just re-eval ~run-app!~ call with initial props

*** ktoa.components

- ~class(ops)~ - Wrapper around ~React.createClass~
- ~element(element opts & children)~ - Wrapper around ~React.createElement~
- ~component(opts)~ - Convenient wrapper for creating your own components like:

#+BEGIN_SRC clojure

(def hello
  (component
   {:render (fn[](this-as that
                  (c/text {} this.props.msg)))}))

;; Later on you can compose it with other components
(def wrapper
  (component #(c/view {}
                (c/text {} "Hello")
                (hello {:msg "World"}))))

;; Or you can use it as a root component for the whole application
(ktoa.core/run-app! "[name-of-app]" wrapper)

;; Alternativly just call it from any place in your project to play with new ideas
(ktoa.core/run-app! "[name-of-app]" (component {:render #(c/text {} "debug me")}))

#+END_SRC

- This namespace currently exposes following wrapped with ~element~
  React Native components:
  - ~activity-indicator~
  - ~button~
  - ~date-picker-ios~
  - ~drawer-layout-android~
  - ~image~
  - ~keyboard-avoiding-view~
  - ~list-view~
  - ~map-view~
  - ~modal~
  - ~navigator~
  - ~picker~
  - ~picker-ios~
  - ~progress-bar-android~
  - ~progress-view-ios~
  - ~refresh-control~
  - ~scroll-view~
  - ~segmented-control-ios~
  - ~slider~
  - ~status-bar~
  - ~switch~
  - ~tab-bar-ios~
  - ~tab-bar-ios-item~
  - ~text~
  - ~text-input~
  - ~toolbar-android~
  - ~touchable-highlight~
  - ~touchable-native-feedback~
  - ~touchable-opacity~
  - ~touchable-without-feedback~
  - ~view~
  - ~view-pager-android~
  - ~web-view~

** Status

Early development, experimenting with right lib design. There are a
lot of discussion happens in http://clojurians.net, on ~#cljsrn~
channel. Feel free to join

** Alternatives

- [[https://github.com/drapanjanas/re-natal][https://github.com/drapanjanas/re-natal]] - Quick start templates for
  different frameworks and some tooling around
- [[https://github.com/mjmeintjes/boot-react-native][https://github.com/mjmeintjes/boot-react-native]] - If you are into Boot

** Credits

Big thanks to decker405 and his awesome idea how to use Figwheel with
RN: https://github.com/decker405/figwheel-react-native

About

Set of useful helpers and wrappers around React Native for ClojureScript development

Resources

Stars

87 stars

Watchers

8 watching

Forks

Releases

Packages

Contributors

Languages