v2.0.0-rc.3
Pre-release
Pre-release
Breaking changes since v2.0.0-rc.1
- API:
m.withAttr
andm.prop
were removed (#2317 @isiahmeadows)
Breaking changes
- API: Component vnode
children
are not normalized into vnodes on ingestion; normalization only happens if and when they are ingested by the view (#2155 (thanks to @magikstm for related optimization #2064)) - API:
m.redraw()
is always asynchronous (#1592) - API:
m.mount()
will only render its own root when called, it will not trigger aredraw()
(#1592) - API: Assigning to
vnode.state
(as invnode.state = ...
) is no longer supported. Instead, an error is thrown ifvnode.state
changes upon the invocation of a lifecycle hook. - API:
m.request
will no longer reject the Promise on server errors (eg. status >= 400) if the caller supplies anextract
callback. This gives applications more control over handling server responses. - hyperscript: when attributes have a
null
orundefined
value, they are treated as if they were absent. #1773 (#2174) - API:
m.request
errors no longer copy response fields to the error, but instead assign the parsed JSON response toerror.response
and the HTTP status codeerror.code
. - hyperscript: when an attribute is defined on both the first and second argument (as a CSS selector and an
attrs
field, respectively), the latter takes precedence, except forclass
attributes that are still added together. #2172 (#2174) - stream: when a stream conditionally returns HALT, dependant stream will also end (#2200)
- render: remove some redundancy within the component initialization code (#2213)
- render: Align custom elements to work like normal elements, minus all the HTML-specific magic. (#2221)
- render: simplify component removal (#2214)
- cast className using toString (#2309)
- render: call attrs' hooks first, with express exception of
onbeforeupdate
to allow attrs to block components from even diffing (#2297) - API:
m.withAttr
removed. (#2317)
News
- Mithril now only officially supports IE11, Firefox ESR, and the last two versions of Chrome/FF/Edge/Safari. (#2296)
- API: Introduction of
m.redraw.sync()
(#1592) - API: Event handlers may also be objects with
handleEvent
methods (#1949, #2222). - API:
m.route.link
accepts an optionaloptions
object (#1930) - API:
m.request
better error message on JSON parse error - (#2195, @codeclown) - API:
m.request
supportstimeout
as attr - (#1966) - API:
m.request
supportsresponseType
as attr - (#2193) - Mocks: add limited support for the DOMParser API (#2097)
- API: add support for raw SVG in
m.trust()
string (#2097) - render/core: remove the DOM nodes recycling pool (#2122)
- render/core: revamp the core diff engine, and introduce a longest-increasing-subsequence-based logic to minimize DOM operations when re-ordering keyed nodes.
- docs: Emphasize Closure Components for stateful components, use them for all stateful component examples.
- stream: Add
stream.lift
as a user-friendly alternative tomerge -> map
orcombine
#1944 - API: ES module bundles are now available for
mithril
andmithril/stream
(#2194 @porsager).- All of the
m.*
properties frommithril
are re-exported as named exports in addition to being attached tom
. m()
itself frommithril
is exported as the default export.mithril/stream
's primary export is exported as the default export.
- All of the
- fragments: allow same attrs/children overloading logic as hyperscript (#2328)
Bug fixes
- API:
m.route.set()
causes all mount points to be redrawn (#1592) - render/attrs: Using style objects in hyperscript calls will now properly diff style properties from one render to another as opposed to re-writing all element style properties every render.
- render/attrs All vnodes attributes are properly removed when absent or set to
null
orundefined
#1804 #2082 (#1865, #2130) - render/core: Render state correctly on select change event #1916 (#1918 @robinchew, #2052)
- render/core: fix various updateNodes/removeNodes issues when the pool and fragments are involved #1990, #1991, #2003, #2021
- render/core: fix crashes when the keyed vnodes with the same
key
had differenttag
values #2128 @JacksonJN (#2130) - render/core: fix cached nodes behavior in some keyed diff scenarios #2132 (#2130)
- render/events:
addEventListener
andremoveEventListener
are always used to manage event subscriptions, preventing external interference. - render/events: Event listeners allocate less memory, swap at low cost, and are properly diffed now when rendered via
m.mount()
/m.redraw()
. - render/events:
Object.prototype
properties can no longer interfere with event listener calls. - render/events: Event handlers, when set to literally
undefined
(or any non-function), are now correctly removed. - render/hooks: fixed an ommission that caused
oninit
to be called unnecessarily in some cases #1992 - docs: tweaks: (#2104 @mikeyb, #2205, @cavemansspa, #2250 @isiahmeadows, #2265, @isiahmeadows)
- render/core: avoid touching
Object.prototype.__proto__
setter withkey: "__proto__"
in certain situations (#2251) - render/core: Vnodes stored in the dom node supplied to
m.render()
are now normalized #2266 - render/core: CSS vars can now be specified in
{style}
attributes (#2192 @barneycarroll), (#2311 @porsager), (#2312 @isiahmeadows) - request: don't modify params, call
extract
/serialize
/deserialize
with correctthis
value (#2288)