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

First draft for being able to update state from a component Wrapper a… #1128

Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
5 changes: 3 additions & 2 deletions src/components/Provider.js
Expand Up @@ -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,
}
}

Expand Down
16 changes: 14 additions & 2 deletions src/components/connectAdvanced.js
Expand Up @@ -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,
Expand All @@ -197,7 +203,7 @@ export default function connectAdvanced(
`or pass a custom React context provider to <Provider> 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
Expand All @@ -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
)
Expand Down