react-native-reanimated
Version:
More powerful alternative to Animated library for React Native.
39 lines (38 loc) • 1.4 kB
JavaScript
;
import React from 'react';
export function assignRef(ref, instance) {
if (typeof ref === 'function') {
const cleanup = ref(instance);
return typeof cleanup === 'function' ? cleanup : undefined;
}
if (ref) {
ref.current = instance;
}
return undefined;
}
export function mergeRefs(...refs) {
return instance => {
const cleanups = refs.map(ref => assignRef(ref, instance) ?? (() => assignRef(ref, null)));
return () => cleanups.forEach(cleanup => cleanup());
};
}
function getCurrentReactOwner() {
return (
// @ts-expect-error React secret internals aren't typed
React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE?.A?.getOwner?.() ||
// @ts-expect-error React secret internals aren't typed
React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED?.ReactCurrentOwner?.current ||
// @ts-expect-error React secret internals aren't typed
React.__SERVER_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE?.ReactCurrentOwner?.current
);
}
export function isReactRendering() {
return !!getCurrentReactOwner();
}
export function isFirstReactRender() {
const currentOwner = getCurrentReactOwner();
// alternate is not null only after the first render and stores all the
// data from the previous component render
return currentOwner && !currentOwner?.alternate;
}
//# sourceMappingURL=reactUtils.js.map