Preact 3

  • Fix for key behaviour, and don't write keys to the DOM as attributes.
  • Performance tuning for a ~10% improvement on DBMonster (basically 10% faster diff algorithm)
  • Refactored diff algorithm to be easier to follow
  • Add Component.prototype.forceUpdate() method.
  • Fix a bug where a child component of a high-order component self-rendering (eg: via setState()) would cause a subsequent re-render of the parent component to re-initialize itself and the child (through the recycler, but this was causing thrash).
  • Fix an issue where nested components would not receive unmount lifecycle hooks (fixes Issue #47)
  • Bugfix: pass context through recycled constructors (with this react-redux is now fully supported!)
  • linkState() when used with top-level keys (ie, not dot-notated) will no longer mutate this.state in-place.

    (Nested keys can and will still mutate this.state, since the implementation of immutable state traversal would essentially be a small immutability library, not something Preact core can justify)

  • Performance tweaks!

This is likely the last beta release of Preact 3.0, it'll become the stable branch shortly.
Feedback and testing welcome!

  • Use a safeguard method to obtain preact attr cache objects before writes
  • Fix edge case where fallthrough attribute values would not be stored in the preact attr cache
  • null instead of delete for _component refs, avoiding shape mutations
  • build tweaks
  • Preact's codebase has been factored into modules
  • Reduced possible repaints by collecting property cache into a namespace
  • 10-20% performance improvement under heavy rendering load!
  • Now available in npm under a nice dist-tag: npm install [email protected]
  • Fixes for event removal (#34), tests.

Beta version of the 3.0.0 major bump:


  • Added context support
  • Bugfix: componentDidUpdate() should not be called after initial render
  • Switch from tracking nextState to tracking prevState
  • Drop VNode#__isVNode in favor of instanceof (reason)