react-pauseable-containers
Version:
Prevent React children from rerendering
31 lines • 1.57 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.PauseableReduxContainer = void 0;
const prop_types_1 = __importDefault(require("prop-types"));
const react_1 = __importDefault(require("react"));
const react_redux_1 = require("react-redux");
const redux_pauseable_store_1 = require("redux-pauseable-store");
const PauseableReduxContainer = (props) => {
const { dispatchWhenPaused, shouldUpdate, children } = props;
const parentStore = (0, react_redux_1.useStore)();
const pauseableStore = react_1.default.useMemo(() => (0, redux_pauseable_store_1.createPauseableStore)(parentStore, {
// A change to the `shouldUpdate` prop will already cause a rerender, so we don't need an extra notification
notifyListersOnUnpause: false,
}), [parentStore]);
pauseableStore.setPaused(!shouldUpdate);
pauseableStore.setDispatch(dispatchWhenPaused);
return react_1.default.createElement(react_redux_1.Provider, { store: pauseableStore }, children);
};
exports.PauseableReduxContainer = PauseableReduxContainer;
PauseableReduxContainer.defaultProps = {
dispatchWhenPaused: null,
};
PauseableReduxContainer.propTypes = {
children: prop_types_1.default.node.isRequired,
dispatchWhenPaused: prop_types_1.default.bool,
shouldUpdate: prop_types_1.default.bool.isRequired,
};
//# sourceMappingURL=PauseableReduxContainer.js.map