Skip to content

Commit

Permalink
Revert "fix timing issue in component updates due to consecutive disp…
Browse files Browse the repository at this point in the history
…atches (#1263)" (#1264)

This reverts commit d162625.
  • Loading branch information
markerikson committed Apr 28, 2019
1 parent d162625 commit bfab97b
Show file tree
Hide file tree
Showing 2 changed files with 1 addition and 54 deletions.
7 changes: 1 addition & 6 deletions src/components/connectAdvanced.js
Expand Up @@ -253,7 +253,6 @@ export default function connectAdvanced(
const lastChildProps = useRef()
const lastWrapperProps = useRef(wrapperProps)
const childPropsFromStoreUpdate = useRef()
const renderIsScheduled = useRef(false)

const actualChildProps = usePureOnlyMemo(() => {
// Tricky logic here:
Expand Down Expand Up @@ -283,7 +282,6 @@ export default function connectAdvanced(
// We want to capture the wrapper props and child props we used for later comparisons
lastWrapperProps.current = wrapperProps
lastChildProps.current = actualChildProps
renderIsScheduled.current = false

// If the render was from a store update, clear out that reference and cascade the subscriber update
if (childPropsFromStoreUpdate.current) {
Expand Down Expand Up @@ -330,17 +328,14 @@ export default function connectAdvanced(

// If the child props haven't changed, nothing to do here - cascade the subscription update
if (newChildProps === lastChildProps.current) {
if (!renderIsScheduled.current) {
notifyNestedSubs()
}
notifyNestedSubs()
} else {
// Save references to the new child props. Note that we track the "child props from store update"
// as a ref instead of a useState/useReducer because we need a way to determine if that value has
// been processed. If this went into useState/useReducer, we couldn't clear out the value without
// forcing another re-render, which we don't want.
lastChildProps.current = newChildProps
childPropsFromStoreUpdate.current = newChildProps
renderIsScheduled.current = true

// If the child props _did_ change (or we caught an error), this wrapper component needs to re-render
forceComponentUpdateDispatch({
Expand Down
48 changes: 0 additions & 48 deletions test/components/connect.spec.js
Expand Up @@ -3182,54 +3182,6 @@ describe('React', () => {

expect(reduxCountPassedToMapState).toEqual(3)
})

it('should ensure top-down updates for consecutive batched updates', () => {
const INC = 'INC'
const reducer = (c = 0, { type }) => (type === INC ? c + 1 : c)
const store = createStore(reducer)

let executionOrder = []
let expectedExecutionOrder = [
'parent map',
'parent render',
'child map',
'child render'
]

const ChildImpl = () => {
executionOrder.push('child render')
return <div>child</div>
}

const Child = connect(state => {
executionOrder.push('child map')
return { state }
})(ChildImpl)

const ParentImpl = () => {
executionOrder.push('parent render')
return <Child />
}

const Parent = connect(state => {
executionOrder.push('parent map')
return { state }
})(ParentImpl)

rtl.render(
<ProviderMock store={store}>
<Parent />
</ProviderMock>
)

executionOrder = []
rtl.act(() => {
store.dispatch({ type: INC })
store.dispatch({ type: '' })
})

expect(executionOrder).toEqual(expectedExecutionOrder)
})
})

it("should enforce top-down updates to ensure a deleted child's mapState doesn't throw errors", () => {
Expand Down

0 comments on commit bfab97b

Please sign in to comment.