@saber2pr/react
Version:
react in Typescript.
34 lines (33 loc) • 1.14 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var shallowEqual_1 = require("../shared/shallowEqual");
var ReactFiberHooks_1 = require("../react-reconciler/ReactFiberHooks");
// omit key `children` in props compared.
var pickProps = function (props) {
return Object.fromEntries(Object.entries(props).filter(function (_a) {
var k = _a[0];
return k !== "children";
}));
};
function memo(component, compare) {
var Component = function (props) {
var newProps = pickProps(props);
var prevProps = ReactFiberHooks_1.useRef(null);
var result = ReactFiberHooks_1.useRef(null);
if (compare) {
if (compare(prevProps.current, newProps)) {
return result.current;
}
}
else {
if (shallowEqual_1.shallowEqual(prevProps.current, newProps)) {
return result.current;
}
}
prevProps.current = newProps;
result.current = component(props);
return result.current;
};
return Component;
}
exports.memo = memo;