···122122</html>
123123```
124124125125-But we don't *have to* turn our "imaginary" HTML into "real" HTML right away. We can stay in the imaginary land for a bit longer by turning *the entire thing* into JSON. Note how in this case, `style` can remain completely intact as an object within:
125125+But we don't *have to* turn our "imaginary" HTML into "real" HTML right away. We can stay in the imaginary land for a bit longer by turning *the entire thing* into JSON.
126126+127127+Note how in this case, `style` can remain completely intact as an object within:
126128127129```js {6,10}
128130["html", {
···143145144146We can *then* easily turn this JSON into the "real" HTML if we want. But JSON is a *richer* representation because it preserves objects in a way that is easy to parse.
145147146146-Going forward, we'll co-evolve these two different but useful representations.
148148+This isn't particularly interesting or useful yet.
149149+150150+But going forward, we'll co-evolve these two representations.
147151148152---
149153···164168}
165169```
166170167167-Now let's read this stuff from the disk.
171171+But we could grab them from somewhere else.
172172+173173+Let's read the data from the filesystem:
168174169175```js {3-4}
170176<html>
···200206}
201207```
202208203203-We'll have to amend our specification. We'll say that if a custom tag like `Greeting` is asynchronous, we'll *wait* for its output. Other than that, there'll be no difference in the final output. Both HTML and JSON will be the same as before.
209209+We'll have to slightly amend our specification to allow this. To *send* HTML, we'll have to *wait* for all custom tags to resolve (and to be replaced with their output).
210210+211211+The end result is still the same:
212212+213213+```js
214214+["html", {
215215+ children: ["body", {
216216+ children: [
217217+ ["p", {
218218+ children: "Hello, Alice",
219219+ style: { color: "purple" }
220220+ }],
221221+ ["p", {
222222+ children: "Hello, Bob",
223223+ style: { color: "pink" }
224224+ }]
225225+ ]
226226+ }]
227227+}]
228228+```
229229+230230+Or, in the "real" HTML form:
231231+232232+```js
233233+<html>
234234+ <body>
235235+ <p style="color: purple">Hello, Alice</p>
236236+ <p style="color: pink">Hello, Bob</p>
237237+ </body>
238238+</html>
239239+```
240240+241241+But it's nice to think of it like this:
242242+243243+```js
244244+<html>
245245+ <body>
246246+ <Greeting username="alice123" />
247247+ <Greeting username="bob456" />
248248+ </body>
249249+</html>
250250+```
251251+252252+These are self-contained abstractions that can load their own data.
253253+254254+Cool beans!
255255+256256+---
257257+258258+### Event Handlers