This commit is contained in:
49
node_modules/react-redux/src/components/Provider.js
generated
vendored
Normal file
49
node_modules/react-redux/src/components/Provider.js
generated
vendored
Normal file
@@ -0,0 +1,49 @@
|
||||
import React, { useMemo } from 'react'
|
||||
import PropTypes from 'prop-types'
|
||||
import { ReactReduxContext } from './Context'
|
||||
import { createSubscription } from '../utils/Subscription'
|
||||
import { useIsomorphicLayoutEffect } from '../utils/useIsomorphicLayoutEffect'
|
||||
|
||||
function Provider({ store, context, children }) {
|
||||
const contextValue = useMemo(() => {
|
||||
const subscription = createSubscription(store)
|
||||
return {
|
||||
store,
|
||||
subscription,
|
||||
}
|
||||
}, [store])
|
||||
|
||||
const previousState = useMemo(() => store.getState(), [store])
|
||||
|
||||
useIsomorphicLayoutEffect(() => {
|
||||
const { subscription } = contextValue
|
||||
subscription.onStateChange = subscription.notifyNestedSubs
|
||||
subscription.trySubscribe()
|
||||
|
||||
if (previousState !== store.getState()) {
|
||||
subscription.notifyNestedSubs()
|
||||
}
|
||||
return () => {
|
||||
subscription.tryUnsubscribe()
|
||||
subscription.onStateChange = null
|
||||
}
|
||||
}, [contextValue, previousState])
|
||||
|
||||
const Context = context || ReactReduxContext
|
||||
|
||||
return <Context.Provider value={contextValue}>{children}</Context.Provider>
|
||||
}
|
||||
|
||||
if (process.env.NODE_ENV !== 'production') {
|
||||
Provider.propTypes = {
|
||||
store: PropTypes.shape({
|
||||
subscribe: PropTypes.func.isRequired,
|
||||
dispatch: PropTypes.func.isRequired,
|
||||
getState: PropTypes.func.isRequired,
|
||||
}),
|
||||
context: PropTypes.object,
|
||||
children: PropTypes.any,
|
||||
}
|
||||
}
|
||||
|
||||
export default Provider
|
||||
Reference in New Issue
Block a user