@@ -1,3 +1,57 @@
|
|||||||
|
## `5.0.0` Welp Welp Welp
|
||||||
|
So it turns out Choo could be radically simplified. We're now comfortably
|
||||||
|
sitting at `~4kb`, have removed a whole bunch of words from the API and should
|
||||||
|
be a whole lot faster. We've [written about it
|
||||||
|
before](https://medium.com/@yoshuawuyts/choo-v5-bc775b007b5e); if you're
|
||||||
|
interested we recommend reading through that post.
|
||||||
|
|
||||||
|
We're now using an event emitter, mutable state and explicit re-renders. Some
|
||||||
|
people might frown at first at the words "mutable state", but if you think it
|
||||||
|
through the mental model doesn't change. "State" has always been a concept of
|
||||||
|
an object that changes over time; we then render the DOM as a snapshot of that
|
||||||
|
state.
|
||||||
|
|
||||||
|
What we've done is change the way we mutate that state - we no longer generate
|
||||||
|
a ton of expensive intermediate objects to mutate the state, but instead mutate
|
||||||
|
the state directly. In turn we've also removed the magic re-rendering and made
|
||||||
|
it explicit. This enables people to create tight render loops that can even be
|
||||||
|
used in GC constrained environments like games or music production. We think
|
||||||
|
this change was well worth it, and will make a lot of sense going forward.
|
||||||
|
|
||||||
|
People might also wonder why we've moved away from `flux`/`elm` and are using
|
||||||
|
an event emitter now. It turns out that the previous architecture had a lot of
|
||||||
|
confusing words that made it harder to learn than it should. It was also not
|
||||||
|
possible to react to changes; the thing that changed always had to specify what
|
||||||
|
needed to respond to it. By using event emitters we've changed this, which will
|
||||||
|
make relations in the application more expressive. All in all, it turned out
|
||||||
|
that all we needed for this was a simple event emitter - we think this was well
|
||||||
|
worth the change and breaking away from what we were previously doing.
|
||||||
|
|
||||||
|
_Pretty much everything about the API changed in this version. There's
|
||||||
|
literally nothing left to remove from the API tho so this is probably the last
|
||||||
|
time we get to break anything in a significant way._
|
||||||
|
|
||||||
|
### changes
|
||||||
|
- :exclamation: state is now mutable and renders are triggered through
|
||||||
|
`.emit('render')`.
|
||||||
|
- :exclamation: we've replaced `.use()`, `.model()` and the rest of the choo
|
||||||
|
architecture with a reworked `.use()` method. It's called once on boot, and
|
||||||
|
exposes a mutable reference to `state` and [an event
|
||||||
|
emitter](https://github.com/yoshuawuyts/nanobus/) that's compatible with
|
||||||
|
Node's
|
||||||
|
[`require('events').EventEmitter`](https://nodejs.org/api/events.html#events_class_eventemitter)
|
||||||
|
- :exclamation: the `.router()` method has been replaced with `.route()`,
|
||||||
|
replacing the nested array API. This should be easier to remember and more
|
||||||
|
performant.
|
||||||
|
- :exclamation: we've replaced `morphdom`/`yo-yo` with `nanomorph`. The two
|
||||||
|
algorithms are very comparable. The differences are that the new algorithm
|
||||||
|
is smaller and the value of input fields on re-rendering will be whatever the
|
||||||
|
`value=""` attribute is.
|
||||||
|
- :exclamation: `choo/mount` is now available as `app.mount()` and calls
|
||||||
|
`app.start()` internally now
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## `4.0.0` The routing patch
|
## `4.0.0` The routing patch
|
||||||
This patch changes the way we handle routes. It introduces query string
|
This patch changes the way we handle routes. It introduces query string
|
||||||
support (!), and changes the router to use a lisp-like syntax. It also inverts
|
support (!), and changes the router to use a lisp-like syntax. It also inverts
|
||||||
@@ -27,6 +81,8 @@ it!
|
|||||||
- update `location` state to expose `search` parameters (query strings) |
|
- update `location` state to expose `search` parameters (query strings) |
|
||||||
[issue](https://github.com/yoshuawuyts/sheet-router/issues/31)
|
[issue](https://github.com/yoshuawuyts/sheet-router/issues/31)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## `3.3.0`
|
## `3.3.0`
|
||||||
Yay, `plugins` now support `wrappers` which is a segway onto HMR, time travel
|
Yay, `plugins` now support `wrappers` which is a segway onto HMR, time travel
|
||||||
and other cool plugins. These changes have come through in barracks `v8.3.0`
|
and other cool plugins. These changes have come through in barracks `v8.3.0`
|
||||||
@@ -36,6 +92,8 @@ but should be super valuable. Wooh!
|
|||||||
### changes
|
### changes
|
||||||
- updated barracks to `v8.3.1`
|
- updated barracks to `v8.3.1`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## `3.2.0`
|
## `3.2.0`
|
||||||
Wooh, `plugins` are a first class citizen now thanks to the `.use()` API. It's
|
Wooh, `plugins` are a first class citizen now thanks to the `.use()` API. It's
|
||||||
a multiplexed version of the old `app = choo(hooks)`. It should enable
|
a multiplexed version of the old `app = choo(hooks)`. It should enable
|
||||||
@@ -47,6 +105,8 @@ have fun with plugins! :tada:
|
|||||||
### changes
|
### changes
|
||||||
- added `app.use()`
|
- added `app.use()`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## `3.1.0`
|
## `3.1.0`
|
||||||
And another patch down. This time around it's mostly maintenance and a bit of
|
And another patch down. This time around it's mostly maintenance and a bit of
|
||||||
perf:
|
perf:
|
||||||
@@ -58,6 +118,8 @@ perf:
|
|||||||
support sites like codepen and the like; __this should not be used for
|
support sites like codepen and the like; __this should not be used for
|
||||||
production__.
|
production__.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## `3.0.0`
|
## `3.0.0`
|
||||||
Woooh, happy third birthday `choo` - _thanks dad_. You're all grown up now;
|
Woooh, happy third birthday `choo` - _thanks dad_. You're all grown up now;
|
||||||
look at how far you've come in the last month. You've grown... tinier? But yet
|
look at how far you've come in the last month. You've grown... tinier? But yet
|
||||||
@@ -140,19 +202,27 @@ Huge thanks to everyone who's collaborated on this, provided feedback or
|
|||||||
even mentioned it anywhere. It's been a hella lot of people, but seriously,
|
even mentioned it anywhere. It's been a hella lot of people, but seriously,
|
||||||
you're the best :steam_locomotive::train::train::train::train::train:
|
you're the best :steam_locomotive::train::train::train::train::train:
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## `2.3.1`
|
## `2.3.1`
|
||||||
- [76](https://github.com/yoshuawuyts/choo/pull/76) - fix router arguments
|
- [76](https://github.com/yoshuawuyts/choo/pull/76) - fix router arguments
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## `2.3.0`
|
## `2.3.0`
|
||||||
- [55](https://github.com/yoshuawuyts/choo/pull/55) - load subscriptions once
|
- [55](https://github.com/yoshuawuyts/choo/pull/55) - load subscriptions once
|
||||||
DOM is ready
|
DOM is ready
|
||||||
- heaps of documentation fixes; looks like choo is taking off 🐨
|
- heaps of documentation fixes; looks like choo is taking off 🐨
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## `2.2.2`
|
## `2.2.2`
|
||||||
- [53](https://github.com/yoshuawuyts/choo/pull/53) - fix assert call for
|
- [53](https://github.com/yoshuawuyts/choo/pull/53) - fix assert call for
|
||||||
subscriptions
|
subscriptions
|
||||||
- [52](https://github.com/yoshuawuyts/choo/pull/52) - fix naming rootId
|
- [52](https://github.com/yoshuawuyts/choo/pull/52) - fix naming rootId
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## `2.0.0`
|
## `2.0.0`
|
||||||
### breaking changes
|
### breaking changes
|
||||||
- namespaces are now enforced more strictly
|
- namespaces are now enforced more strictly
|
||||||
@@ -161,5 +231,7 @@ you're the best :steam_locomotive::train::train::train::train::train:
|
|||||||
string in models)
|
string in models)
|
||||||
- namespaced models can now only operate within themselves
|
- namespaced models can now only operate within themselves
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## `1.0.0`
|
## `1.0.0`
|
||||||
- first version of choo
|
- first version of choo
|
||||||
|
|||||||
Reference in New Issue
Block a user