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

[WIP] [simple-cache-provider] Subscriptions #13216

Closed
wants to merge 5 commits into from

Commits on Jul 17, 2018

  1. Store list of contexts on the fiber

    Currently, context can only be read by a special type of component,
    ContextConsumer. We want to add support to all fibers, including
    classes and functional components.
    
    Each fiber may read from one or more contexts. To enable quick, mono-
    morphic access of this list, we'll store them on a fiber property.
    acdlite committed Jul 17, 2018
    Configuration menu
    Copy the full SHA
    ddfda68 View commit details
    Browse the repository at this point in the history
  2. Context.unstable_read

    unstable_read can be called anywhere within the render phase. That
    includes the render method, getDerivedStateFromProps, constructors,
    functional components, and context consumer render props.
    
    If it's called outside the render phase, an error is thrown.
    acdlite committed Jul 17, 2018
    Configuration menu
    Copy the full SHA
    a945ce5 View commit details
    Browse the repository at this point in the history
  3. Remove vestigial context cursor

    Wasn't being used.
    acdlite committed Jul 17, 2018
    Configuration menu
    Copy the full SHA
    9358aaf View commit details
    Browse the repository at this point in the history
  4. Split fiber.expirationTime into two separate fields

    Currently, the `expirationTime` field represents the pending work of
    both the fiber itself — including new props, state, and context — and of
    any updates in that fiber's subtree.
    
    This commit adds a second field called `childExpirationTime`. Now
    `expirationTime` only represents the pending work of the fiber itself.
    The subtree's pending work is represented by `childExpirationTime`.
    
    The biggest advantage is it requires fewer checks to bailout on already
    finished work. For most types of work, if the `expirationTime` does not
    match the render expiration time, we can bailout immediately without
    any further checks. This won't work for fibers that have
    `shouldComponentUpdate` semantics (class components), for which we still
    need to check for props and state changes explicitly.
    acdlite committed Jul 17, 2018
    Configuration menu
    Copy the full SHA
    6d9bc7e View commit details
    Browse the repository at this point in the history
  5. [simple-cache-provider] createObservableResource

    Adds subscription support. A subscription is created the first time
    a value is read from the cache, and disposed once we detect that all
    the consumers have unmounted.
    
    On the initial mount, subscriptions are stored in a special map on the
    nearest provider (`_pendingChildSubscriptionsMap`). When the initial
    mount commits, the subscriptions are transferred from the pending set
    to the newly mounted provider.
    acdlite committed Jul 17, 2018
    Configuration menu
    Copy the full SHA
    0830626 View commit details
    Browse the repository at this point in the history