diff --git a/src/components/Provider.js b/src/components/Provider.js index 03c562645..60040388f 100644 --- a/src/components/Provider.js +++ b/src/components/Provider.js @@ -6,11 +6,12 @@ class Provider extends Component { constructor(props) { super(props) - const { store } = props + const { store, UNSAFE_readLatestStoreStateOnFirstRender } = props this.state = { storeState: store.getState(), - store + store, + readStoreStateOnFirstRender: UNSAFE_readLatestStoreStateOnFirstRender, } } diff --git a/src/components/connectAdvanced.js b/src/components/connectAdvanced.js index 081899d56..e59370813 100644 --- a/src/components/connectAdvanced.js +++ b/src/components/connectAdvanced.js @@ -186,9 +186,15 @@ export default function connectAdvanced( ) this.selectDerivedProps = makeDerivedPropsSelector() this.selectChildElement = makeChildElementSelector() + this.isFirstRender = true this.renderWrappedComponent = this.renderWrappedComponent.bind(this) } + componentDidMount() { + console.log(`component ${wrappedComponentName} did mount`) + this.isFirstRender = false + } + renderWrappedComponent(value) { invariant( value, @@ -197,7 +203,7 @@ export default function connectAdvanced( `or pass a custom React context provider to and the corresponding ` + `React context consumer to ${displayName} in connect options.` ) - const { storeState, store } = value + const { storeState, store, readStoreStateOnFirstRender } = value let wrapperProps = this.props let forwardedRef @@ -207,8 +213,14 @@ export default function connectAdvanced( forwardedRef = this.props.forwardedRef } + let newStoreState = storeState + if (readStoreStateOnFirstRender && this.isFirstRender) { + console.log(`recompute state for getting last one on component ${wrappedComponentName}`) + newStoreState = store.getState() + } + let derivedProps = this.selectDerivedProps( - storeState, + newStoreState, wrapperProps, store )