perf: 优化代码

pull/13/head
moonrailgun 4 years ago
parent 68752a654a
commit f463ea332b

@ -103,7 +103,7 @@ export const VirtualizedMessageList: React.FC<VirtualizedMessageListProps> =
const initScrollToIndex = () => { const initScrollToIndex = () => {
return { return {
index: 0, index: 0,
position: 'end', position: 'end' as const,
}; };
}; };

@ -191,6 +191,10 @@ interface DynamicSizeListState {
localOlderPostsToRender: [number, number]; localOlderPostsToRender: [number, number];
scrolledToInitIndex?: boolean; scrolledToInitIndex?: boolean;
} }
type DynamicSizeListSnapshot = {
previousScrollTop: number;
previousScrollHeight: number;
} | null;
/** /**
* loader * loader
@ -345,34 +349,35 @@ export default class DynamicSizeList extends PureComponent<
getSnapshotBeforeUpdate( getSnapshotBeforeUpdate(
prevProps: DynamicSizeListProps, prevProps: DynamicSizeListProps,
prevState: DynamicSizeListState prevState: DynamicSizeListState
) { ): DynamicSizeListSnapshot {
if ( if (this._outerRef) {
prevState.localOlderPostsToRender[0] !== const isChangedLocalOlderPostsToRender =
this.state.localOlderPostsToRender[0] || prevState.localOlderPostsToRender[0] !==
prevState.localOlderPostsToRender[1] !== this.state.localOlderPostsToRender[0] ||
this.state.localOlderPostsToRender[1] prevState.localOlderPostsToRender[1] !==
) { this.state.localOlderPostsToRender[1];
if (!this._outerRef) {
return; if (isChangedLocalOlderPostsToRender) {
const element = this._outerRef;
const previousScrollTop = element.scrollTop;
const previousScrollHeight = element.scrollHeight;
return {
previousScrollTop,
previousScrollHeight,
};
} }
const element = this._outerRef;
const previousScrollTop = element.scrollTop;
const previousScrollHeight = element.scrollHeight;
return {
previousScrollTop,
previousScrollHeight,
};
} }
return null; return null;
} }
componentDidUpdate( componentDidUpdate(
prevProps: DynamicSizeListProps, prevProps: DynamicSizeListProps,
prevState: DynamicSizeListState, prevState: DynamicSizeListState,
snapshot: any snapshot: DynamicSizeListSnapshot
) { ) {
if (this.state.scrolledToInitIndex) { if (this.state.scrolledToInitIndex) {
// 如果一定滚动到初始位置
const { const {
scrollDirection, scrollDirection,
scrollOffset, scrollOffset,
@ -432,6 +437,9 @@ export default class DynamicSizeList extends PureComponent<
if (!this._outerRef) { if (!this._outerRef) {
return; return;
} }
if (!snapshot) {
return;
}
const postlistScrollHeight = this._outerRef.scrollHeight; const postlistScrollHeight = this._outerRef.scrollHeight;

Loading…
Cancel
Save