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 connected props derived props generation #975

Closed
wants to merge 3 commits into from

Commits on Jul 14, 2018

  1. fix connected props derived props generation

    This commit fixes reduxjs#965
    
    The essence of the problem is that getDerivedStateFromProps is called when the incoming props OR incoming local state changes. So we cannot store anything in state that is needed in shouldComponentUpdate.
    
    This commit splits up the tracking of incoming props, incoming store state changes, and removes getDerivedStateFromProps and the usage of local state to store any information.
    
    Instead, local state is used as a flag solely to track whether the incoming store state has changed.
    
    Since derived props are needed in shouldComponentUpdate, it is generated there and then compared to the previous version of derived props.
    
    If forceUpdate() is called, this bypasses sCU, and so a check in render() compares the props that should have been passed to sCU to those passed to render(). If they are different, it generates them just-in-time.
    
    To summarize:
    1) shouldComponentUpdate is ONLY used to process changes to incoming props
    2) runUpdater (renamed to triggerUpdateOnStoreStateChange) checks to see if the store state has changed, and stores the state, then updates the counter in local state in order to trigger a new sCU call to re-generate derived state.
    
    Because of these changes, getDerivedStateFromProps and the polyfill are both removed.
    
    All tests pass on my machine, but there is at least 1 side effects to the new design:
    
     - Many of the tests pass state unchanged to props, and pass this to child components. With these changes, the two updates are processed separately. Props changes are processed first, and then state changes are processed.
    
    I updated the affected tests to show that there are "in-between" states where the state and props are inconsistent and mapStateToProps is called with these changes. If the old behavior is desired, that would require another redesign, I suspect.
    cellog committed Jul 14, 2018
    Configuration menu
    Copy the full SHA
    aaa0470 View commit details
    Browse the repository at this point in the history
  2. fix linting errors

    cellog committed Jul 14, 2018
    Configuration menu
    Copy the full SHA
    41ff984 View commit details
    Browse the repository at this point in the history

Commits on Jul 16, 2018

  1. Configuration menu
    Copy the full SHA
    9f44bed View commit details
    Browse the repository at this point in the history