From 95f88424a6cf7fa782e28ef501a243d4c7d16325 Mon Sep 17 00:00:00 2001 From: Daniel Compton Date: Mon, 5 Dec 2016 17:56:03 +1300 Subject: [PATCH] Update docs to clarify some things --- README.md | 97 +++++++++++++++++++------------------ images/Readme/todolist.png | Bin 0 -> 39238 bytes 2 files changed, 51 insertions(+), 46 deletions(-) create mode 100644 images/Readme/todolist.png diff --git a/README.md b/README.md index 6826d43..9b9f3ba 100644 --- a/README.md +++ b/README.md @@ -85,31 +85,31 @@ you to understand re-frame, is **practically proof** it does physics. Computationally, each iteration of the loop involves a -6 domino cascade. +six domino cascade. -One domino triggers the next, which triggers the next, etc, -until we are back at the beginning of the loop. Each iteration is the same cascade. +One domino triggers the next, which triggers the next, et cetera, +until all the dominoes are knocked over. Then re-frame stands the dominoes up +so the loop can repeat again. Each iteration is the same cascade, like a really boring OK Go video. -Here are the 6 dominoes ... +Here are the six dominoes ... ### 1st Domino - Event Initiation An `event` is sent when something happens - the user clicks a button, or a websocket receives a new message. -Without the impulse of a triggering `event`, no 6 domino cascade occurs. -It is only because of `events` that a re-frame app is propelled, +Without the impulse of a triggering `event`, no six domino cascade occurs. +It is only because of `event`s that a re-frame app is propelled, loop iteration after loop iteration, from one state to the next. re-frame is `event` driven. ### 2nd Domino - Event Handling -In response to an `event`, an application must compute -its implication (the ambition, the intent). This is known as `event handling`. +In response to an `event`, an application must decide what action to take. This is known as `event handling`. -Event handler functions compute `effects` or, more accurately, -a **description of `effects`**. So they compute a data structure +Event handler functions compute side effects (known in re-frame simply as `effects`). More accurately, they compute +a **description of `effects`**. This description is a data structure which says, declaratively, how the world should change (because of the event). Much of the time, only the "app state" of the SPA itself need @@ -118,17 +118,17 @@ change, but sometimes the outside world must also be effected ### 3rd Domino - Effect Handling -These descriptions of `effects` are realised (actioned). +The descriptions of `effects` are realised (actioned). This is where the mutation happens. Now, to a functional programmer, `effects` are scary in a [xenomorph kind of way](https://www.google.com.au/search?q=xenomorph). Nothing messes with functional purity -quite like the need for effects and coeffects. But, on the other hand, `effects` are equally -marvelous because they take the app forward. Without them, an app stays stuck in one state forever, +quite like the need for side effects. But, on the other hand, `effects` are equally +marvelous because they move the app forward. Without them, an app stays stuck in one state forever, never achieving anything. So re-frame embraces the protagonist nature of `effects` - the entire, unruly zoo of them - but -it does so in a controlled, debuggable, auditable, mockable, plugable way. +it does so in a controlled, debuggable, auditable, mockable, pluggable way. ### A Pivot Point @@ -136,7 +136,7 @@ The world has just changed and, very often, one particular part of the world, namely the **app's state**. re-frame's `app state` is held in one place - think of it like you -would an in-memory, central database for the app. (Much more details later) +would an in-memory, central database for the app (Much more details later). When domino 3 changes this `app state`, it triggers the next part of the cascade involving dominoes 4-5-6. @@ -144,14 +144,14 @@ involving dominoes 4-5-6. ### The view formula The 4-5-6 domino cascade implements the formula made famous by Facebook's ground-breaking React library: - `v = f(s)` + `v = f(s)` A view, `v`, is a function, `f`, of the app state, `s`. -Or, said another way, there are functions `f` that compute which DOM nodes, `v`, +Said another way, there are functions `f` that compute which DOM nodes, `v`, should be displayed to the user when the application is in a given app state, `s`. -Or, another way: **over time**, as `s` changes, `f` +Or, differently: **over time**, as `s` changes, `f` will be re-run each time to compute new `v`, forever keeping `v` up to date with the current `s`. In our case, domino 3 changes `s`, the application state, @@ -162,7 +162,7 @@ Except, of course, there are nuances. For instance, there's no single `f` to ru There may be many functions which collectively build the overall DOM, and only part of `s` may change at any one time, so only part of the `v` (DOM) need be re-computed and updated. And some parts of `v` might not -even be showing right now. +be showing right now. ### Domino 4 - Query @@ -192,8 +192,13 @@ by Reagent/React. I mention it here for completeness and to fully close the loop. This is the step in which the hiccup-formatted -"descriptions of required DOM", returned by the view functions of Domino 5, are made real. The -browser DOM nodes are mutated. +"descriptions of required DOM", returned by the view functions of Domino 5, are made real. +The browser DOM nodes are mutated. + +### Whew! A reprieve + +After the six dominoes have fallen, re-frame (metaphorically) stands them up. +Your re-frame app is poised lithely, ready for the next `event` to trigger the cycle again. ## A Cascade Of Simple Functions @@ -221,26 +226,27 @@ after those dominoes. ## Code Fragments -Let's take this domino narrative one step further and introduce some code fragments. +Let's take this domino narrative one step further and introduce some code fragments. +We're going to be working on a SPA with a list of items. + +![Example SPA todo list]("/images/Readme/todolist.png?raw=true") + +**Imagine:** You have just clicked the "delete" button next to the 3rd item in the list. + +In response, what happens within this imaginary re-frame app? Here's a sketch of the six domino cascade: > Don't expect to completely grok the terse code presented below. We're still at 30,000 feet. Details later. - -**Imagine:** the UI of an SPA shows a list of items. This user -clicks the "delete" button next to the 3rd item in a list. - -In response, -what happens within this imaginary re-frame app? Here's a sketch of the 6 domino cascade: ### Code For Domino 1 The delete button for that 3rd item will have an `on-click` handler (function) which looks -like this: +like this: ```clj #(re-frame.core/dispatch [:delete-item 2486]) ``` -`dispatch` emits an `event`. +`dispatch` emits an `event`. A re-frame `event` is a vector and, in this case, it has 2 elements: `[:delete-item 2486]`. The first element, @@ -306,11 +312,11 @@ On program startup, such a query-fn must be associated with a key, ```clj (re-frame.core/reg-sub :query-items query-fn) ``` - + ### Code For Domino 5 Because the query function re-computed a new value, a view (function) which subscribes -to "items", is called automatically (reactively) to re-compute DOM. +to "items", is called automatically (reactively) to re-compute DOM. It produces a hiccup-formatted data structure describing the DOM nodes required (no DOM nodes @@ -325,7 +331,7 @@ for the deleted item, obviously, but otherwise the same DOM as last time). Notice how `items` is "sourced" from "app state" via `subscribe`. It is called with a query key to identify what data it needs, which should make a prior registration. - + ### Code For Domino 6 The computed DOM (hiccup) is made real by Reagent/React. No code from you required. Just happens. @@ -355,7 +361,7 @@ waiting for the next event. When building a re-frame app, you will: - design your app's information model (data and schema layer) - - write and register event handler functions (control and transition layer) (domino 2) + - write and register event handler functions (control and transition layer) (domino 2) - (once in a blue moon) write and register effect and coeffect handler functions (domino 3) which do the mutative dirty work of which we dare not speak. @@ -423,19 +429,21 @@ and useful 3rd party libraries. ## Where Do I Go Next? -We haven't yet looked at code much, but **at this point you -already know 50% of re-frame.** There's detail to fill in, for sure, +We haven't looked at much code yet, but **at this point you +already know 50% of re-frame.** There's detail to fill in, for sure, but the core concepts, and basic coding techniques, are now known to you. -Next, you need to do the code walk-through in the tutorial. This -will get your knowledge to about 70%. The +Next you need to read read the other three articles in the documentation [Introduction section](/docs#introduction): + +* [Application State](/docs/ApplicationState.md) +* [Code Walkthrough](/docs/CodeWalkthrough.md) +* [Mental Model Omnibus](/docs/MentalModelOmnibus.md) + +This will get your knowledge to about 70%. The final 30% will come incrementally with use, and by reading the tutorials (of which there's a few). -So, next, read more here:
-https://github.com/Day8/re-frame/blob/master/docs/README.md - -Experiment with these examples:
+You can also experiment with these examples:
https://github.com/Day8/re-frame/tree/master/examples Use a template to create your own project:
@@ -448,20 +456,17 @@ https://github.com/Day8/re-frame/blob/develop/docs/External-Resources.md ### T-Shirt Unlocked Good news. If you've read this far, -your insiders T-shirt will be arriving soon - it -will feature turtles, +your insiders T-shirt will be arriving soon - it will feature turtles, [xkcd](http://xkcd.com/1416/) and something indicating "data all the way down". But we're still working on the hilarious caption bit. Open a repo issue with a suggestion. - ## Licence Copyright © 2014-2016 Michael Thompson Distributed under The MIT License (MIT) - See LICENSE.txt - [SPAs]:http://en.wikipedia.org/wiki/Single-page_application [SPA]:http://en.wikipedia.org/wiki/Single-page_application [Reagent]:http://reagent-project.github.io/ diff --git a/images/Readme/todolist.png b/images/Readme/todolist.png new file mode 100644 index 0000000000000000000000000000000000000000..2d7da138c0c8207d72ba7038e5bf3162a04feb58 GIT binary patch literal 39238 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 EFG2c?zW@LL literal 0 HcmV?d00001