re-frame/examples/todomvc
Daniel Compton cc773daa26 Update to 0.10.3-alpha2 2017-12-12 16:39:09 +13:00
..
checkouts Update to 0.10.3-alpha2 2017-12-12 16:39:09 +13:00
resources/public WIP. undo test fails. 2016-06-22 10:54:41 +10:00
src/todomvc Merge pull request #355 from satchit8/extraneous 2017-10-25 17:12:16 +13:00
.gitignore Switch to using CircleCI and automated testing with Karma 2015-12-10 21:47:18 +13:00
README.md TodoMVC Readme change 2017-09-27 04:28:28 +10:00
project.clj Upgrade all dependencies to the latest. This means moving to cljs.spec.alpha in todomvc example 2017-08-17 21:40:58 +10:00

README.md

TodoMVC done with re-frame

A re-frame implementation of TodoMVC.

But this is NOT your normal, lean and minimal todomvc implementation, geared towards showing how easily re-frame can implement the challenge.

Instead, this todomvc example has evolved into more of a teaching tool and we've thrown in more advanced re-frame features which are not really required to get the job done. So lean and minimal is no longer a goal.

Setup And Run

  1. Install Leiningen (plus Java).

  2. Get the re-frame repo

    git clone https://github.com/Day8/re-frame.git
    
  3. cd to the right example directory

    cd re-frame/examples/todomvc
    
  4. Clean build

    lein do clean, figwheel
    
  5. Run You'll have to wait for step 4 to do its compile, and then:

    open http://localhost:3450
    

Compile an optimised version

  1. Compile

    lein do clean, with-profile prod compile
    
  2. Open the following in your browser

    resources/public/index.html
    

Exploring The Code

From the re-frame readme:

To build a re-frame app, you:
  - design your app's data structure (data layer)
  - write and register subscription functions (query layer)
  - write Reagent component functions (view layer)
  - write and register event handler functions (control layer and/or state transition layer)

In src, there's a matching set of files (each small):

src
├── core.cljs         <--- entry point, plus history
├── db.cljs           <--- data related  (data layer)
├── subs.cljs         <--- subscription handlers  (query layer)
├── views.cljs        <--- reagent  components (view layer)
└── events.cljs     <--- event handlers (control/update layer)

Further Notes

The official reagent example.