luna-data-grid
Version:
Grid for displaying datasets
47 lines (46 loc) • 1.3 kB
JavaScript
import { useEffect, useRef, useState, } from 'react';
export function useForceUpdate() {
const [_, setForceUpdateValue] = useState(0);
return () => setForceUpdateValue((value) => value + 1);
}
export function usePrevious(value) {
const ref = useRef();
useEffect(() => {
ref.current = value;
});
return ref.current;
}
export function useNonInitialEffect(effect, deps) {
const initialRender = useRef(true);
useEffect(() => {
let effectReturns = () => { };
if (initialRender.current) {
initialRender.current = false;
}
else {
effectReturns = effect();
}
if (effectReturns && typeof effectReturns === 'function') {
return effectReturns;
}
}, deps);
}
export function useEvent(component, event, prev, prop) {
useEffect(() => {
if (component.current) {
if (prev) {
component.current.off(event, prev);
}
if (prop) {
component.current.on(event, prop);
}
}
}, [prop]);
}
export function useOption(component, key, prop) {
useNonInitialEffect(() => {
if (component.current) {
component.current.setOption(key, prop);
}
}, [prop]);
}