adui
Version:
<div> <img src="https://wxa.wxs.qq.com/mpweb/delivery/legacy/wxadtouch/upload/t1/od834zef_52939fc6.png" style="margin:40px 0 0 -8px; background-color: #fcfcfc; box-shadow: none;" /> </div>
50 lines (49 loc) • 1.58 kB
TypeScript
/**
* ResizeObserver 会以 class 组件的形式存在,
* 因为其使用 findDomNode(this) 实现 children 为 fc 时不能给 ref 的情况
* 如果 ResizeObserver 也是 fc,就没有办法在不添加额外结构的情况下拿到 dom 了
*/
import * as React from "react";
import ResizeObserver from "resize-observer-polyfill";
interface ResizeObserverEntry {
readonly borderBoxSize: ResizeObserverEntryBoxSize;
readonly contentBoxSize: ResizeObserverEntryBoxSize;
readonly contentRect: any;
readonly target: Element;
}
interface ResizeObserverEntryBoxSize {
blockSize: number;
inlineSize: number;
}
export interface IResizeObserverProps {
children: React.ReactNode;
disabled?: boolean;
onResize?: (size: {
width: number;
height: number;
}) => void;
}
interface ResizeObserverState {
height: number;
width: number;
}
type RefNode = React.ReactInstance | HTMLElement | null;
declare class ReactResizeObserver extends React.Component<IResizeObserverProps, ResizeObserverState> {
static displayName: string;
resizeObserver: ResizeObserver | null;
childNode: RefNode;
currentElement: Element | null;
state: {
width: number;
height: number;
};
componentDidMount(): void;
componentDidUpdate(): void;
componentWillUnmount(): void;
onComponentUpdated(): void;
onResize: (entries: ResizeObserverEntry[]) => void;
setChildNode: (node: RefNode) => void;
destroyObserver(): void;
render(): JSX.Element | null;
}
export default ReactResizeObserver;