@tarojsx/library
Version:
Taro3 library
33 lines • 1.17 kB
JavaScript
import { useMemo, useEffect } from 'react';
import { eventCenter } from '@tarojs/taro';
import { uuid } from '../utils';
const trigger = (eventName) => (...args) => eventCenter.trigger(eventName, ...args);
const eventKeys = [
'onScrollToUpper',
'onScrollToLower',
'onRefresherPulling',
'onRefresherRefresh',
'onRefresherRestore',
'onRefresherAbort',
];
/**
* Wrap ScrollView props to static object.
*
* WHY? `react-window outerElementType is a "tag". If you update this "tag". ScrollView will recreate and lose scroll position.
*/
export function useOuterScrollViewProps(props) {
/** memo id for each component */
const id = useMemo(uuid, []);
const result = Object.assign({}, props);
for (const eventKey of eventKeys) {
const eventName = `atReactWindow:${id}:${eventKey}`;
const eventHandler = props[eventKey] || (() => { });
useEffect(() => {
eventCenter.on(eventName, eventHandler);
return () => eventCenter.off(eventName);
}, [eventHandler]);
result[eventKey] = trigger(eventName);
}
return result;
}
//# sourceMappingURL=useOuterScrollViewProps.js.map