Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix keys, normalize holes #2452

merged 3 commits into from Jul 3, 2019


Copy link


  • Require fragments to either have only keyed children or no keyed children.
  • Ban holes from keyed fragments, to reduce complexity in the keyed diff algorithm.
  • Normalize booleans, null, and undefined to be a single hole sentinel null, to simplify representation.
  • Document a common pattern on how to have a programmatically replaceable node, to resolve some confusion around that.

Motivation and Context

Closes #2434
Fixes #2248

Also resolves a class of paper cuts that have found their way onto Gitter the past several months with v1.

How Has This Been Tested?

Added a couple tests, updated a bunch, rewrote a few.

Types of changes

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)
  • Documentation change


  • My code follows the code style of this project.
  • My change requires a change to the documentation.
  • I have updated the documentation accordingly.
  • I have read the CONTRIBUTING document.
  • I have added tests to cover my changes.
  • All new and existing tests passed.
  • I have updated docs/

This brings a lot better consistency with that API, even though it's
slightly breaking. (I had to update a bunch of tests to correspond with
@project-bot project-bot bot added this to Needs triage in Triage/bugs Jul 3, 2019
@dead-claudia dead-claudia merged commit 6c562d2 into MithrilJS:next Jul 3, 2019
Triage/bugs automation moved this from Needs triage to Closed Jul 3, 2019
@dead-claudia dead-claudia deleted the fix-keys branch July 3, 2019 21:06
Copy link

ancms2600 commented Sep 1, 2019

moved to: #2526
Feature Request: Normalize vnode.children passed to m() hypertext
(flatten arrays, omit null, undefined and false)

Copy link
Member Author

@ancmikesmullin Please file a new issue with that suggestion.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
None yet

Successfully merging this pull request may close these issues.

Re-define purpose of key attribute Forbid mixing keyed and non-keyed vnodes in the same array
2 participants