Provider.js 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  3. var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
  4. exports.__esModule = true;
  5. exports["default"] = void 0;
  6. var _react = _interopRequireWildcard(require("react"));
  7. var _propTypes = _interopRequireDefault(require("prop-types"));
  8. var _Context = require("./Context");
  9. var _Subscription = _interopRequireDefault(require("../utils/Subscription"));
  10. function Provider(_ref) {
  11. var store = _ref.store,
  12. context = _ref.context,
  13. children = _ref.children;
  14. var contextValue = (0, _react.useMemo)(function () {
  15. var subscription = new _Subscription["default"](store);
  16. subscription.onStateChange = subscription.notifyNestedSubs;
  17. return {
  18. store: store,
  19. subscription: subscription
  20. };
  21. }, [store]);
  22. var previousState = (0, _react.useMemo)(function () {
  23. return store.getState();
  24. }, [store]);
  25. (0, _react.useEffect)(function () {
  26. var subscription = contextValue.subscription;
  27. subscription.trySubscribe();
  28. if (previousState !== store.getState()) {
  29. subscription.notifyNestedSubs();
  30. }
  31. return function () {
  32. subscription.tryUnsubscribe();
  33. subscription.onStateChange = null;
  34. };
  35. }, [contextValue, previousState]);
  36. var Context = context || _Context.ReactReduxContext;
  37. return _react["default"].createElement(Context.Provider, {
  38. value: contextValue
  39. }, children);
  40. }
  41. if (process.env.NODE_ENV !== 'production') {
  42. Provider.propTypes = {
  43. store: _propTypes["default"].shape({
  44. subscribe: _propTypes["default"].func.isRequired,
  45. dispatch: _propTypes["default"].func.isRequired,
  46. getState: _propTypes["default"].func.isRequired
  47. }),
  48. context: _propTypes["default"].object,
  49. children: _propTypes["default"].any
  50. };
  51. }
  52. var _default = Provider;
  53. exports["default"] = _default;