react-singleton-hook
Version:
Share custom hook state across all components
25 lines (23 loc) • 864 B
JavaScript
;
exports.__esModule = true;
exports.SingleItemContainer = void 0;
var _react = require("react");
var SingleItemContainer = function SingleItemContainer(_ref) {
var initValue = _ref.initValue,
useHookBody = _ref.useHookBody,
applyStateChange = _ref.applyStateChange;
var lastState = (0, _react.useRef)(initValue);
if (typeof useHookBody !== 'function') {
throw new Error("function expected as hook body parameter. got " + typeof useHookBody);
}
var val = useHookBody();
//useLayoutEffect is safe from SSR perspective because SingleItemContainer should never be rendered on server
(0, _react.useLayoutEffect)(function () {
if (lastState.current !== val) {
lastState.current = val;
applyStateChange(val);
}
}, [applyStateChange, val]);
return null;
};
exports.SingleItemContainer = SingleItemContainer;