Skip to content

Commit d2006da

Browse files
First draft for being able to update state from a component Wrapper and make it directly available in its child
1 parent 595ae8f commit d2006da

File tree

2 files changed

+17
-4
lines changed

2 files changed

+17
-4
lines changed

src/components/Provider.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,12 @@ class Provider extends Component {
66
constructor(props) {
77
super(props)
88

9-
const { store } = props
9+
const { store, UNSAFE_readLatestStoreStateOnFirstRender } = props
1010

1111
this.state = {
1212
storeState: store.getState(),
13-
store
13+
store,
14+
readStoreStateOnFirstRender: UNSAFE_readLatestStoreStateOnFirstRender,
1415
}
1516
}
1617

src/components/connectAdvanced.js

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -186,9 +186,15 @@ export default function connectAdvanced(
186186
)
187187
this.selectDerivedProps = makeDerivedPropsSelector()
188188
this.selectChildElement = makeChildElementSelector()
189+
this.isFirstRender = true
189190
this.renderWrappedComponent = this.renderWrappedComponent.bind(this)
190191
}
191192

193+
componentDidMount() {
194+
console.log(`component ${wrappedComponentName} did mount`)
195+
this.isFirstRender = false
196+
}
197+
192198
renderWrappedComponent(value) {
193199
invariant(
194200
value,
@@ -197,7 +203,7 @@ export default function connectAdvanced(
197203
`or pass a custom React context provider to <Provider> and the corresponding ` +
198204
`React context consumer to ${displayName} in connect options.`
199205
)
200-
const { storeState, store } = value
206+
const { storeState, store, readStoreStateOnFirstRender } = value
201207

202208
let wrapperProps = this.props
203209
let forwardedRef
@@ -207,8 +213,14 @@ export default function connectAdvanced(
207213
forwardedRef = this.props.forwardedRef
208214
}
209215

216+
let newStoreState = storeState
217+
if (readStoreStateOnFirstRender && this.isFirstRender) {
218+
console.log(`recompute state for getting last one on component ${wrappedComponentName}`)
219+
newStoreState = store.getState()
220+
}
221+
210222
let derivedProps = this.selectDerivedProps(
211-
storeState,
223+
newStoreState,
212224
wrapperProps,
213225
store
214226
)

0 commit comments

Comments
 (0)