You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
1.5 KiB
53 lines
1.5 KiB
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(_ref) { |
|
var store = _ref.store, |
|
context = _ref.context, |
|
children = _ref.children; |
|
var contextValue = useMemo(function () { |
|
var subscription = createSubscription(store); |
|
return { |
|
store: store, |
|
subscription: subscription |
|
}; |
|
}, [store]); |
|
var previousState = useMemo(function () { |
|
return store.getState(); |
|
}, [store]); |
|
useIsomorphicLayoutEffect(function () { |
|
var subscription = contextValue.subscription; |
|
subscription.onStateChange = subscription.notifyNestedSubs; |
|
subscription.trySubscribe(); |
|
|
|
if (previousState !== store.getState()) { |
|
subscription.notifyNestedSubs(); |
|
} |
|
|
|
return function () { |
|
subscription.tryUnsubscribe(); |
|
subscription.onStateChange = null; |
|
}; |
|
}, [contextValue, previousState]); |
|
var Context = context || ReactReduxContext; |
|
return /*#__PURE__*/React.createElement(Context.Provider, { |
|
value: contextValue |
|
}, children); |
|
} |
|
|
|
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; |