refun
Version:
A collection of React Hook-enabled functions that compose harmoniously with each other. Similar to `recompose`, but:
44 lines (41 loc) • 1.5 kB
JavaScript
import { useRef } from 'react';
import { EMPTY_OBJECT } from 'tsfn';
import { shallowEquals } from './utils';
export function pureComponent() {
for (var _len = arguments.length, uses = new Array(_len), _key = 0; _key < _len; _key++) {
uses[_key] = arguments[_key];
}
return function (Component) {
return function (props) {
var renderResultRef = useRef(null);
var prevOutPropsRef = useRef(EMPTY_OBJECT);
var outProps = uses.reduce(function (props, use) {
return use(props);
}, props);
if (prevOutPropsRef.current === EMPTY_OBJECT || !shallowEquals(prevOutPropsRef.current, outProps)) {
prevOutPropsRef.current = outProps;
renderResultRef.current = Component(outProps);
}
return renderResultRef.current;
};
};
} // export function pureComponent(...uses: any[]) {
// return (displayComponent: FC<any>) => {
// const MemoComponent = memo(Component)
// const MemoRefComponent = memo(forwardRef((props: any, ref) => Component({ ...props, ref })))
// const Result = memo((props: any) => {
// const outProps = uses.reduce((props, use) => use(props, { displayName }), props)
// if (isUndefined(outProps.ref)) {
// return (
// <MemoComponent {...outProps} />
// )
// }
// return (
// <MemoRefComponent {...outProps}/>
// )
// })
// Result.displayName = displayName
// return Result
// }
// }
//# sourceMappingURL=pure-component.js.map