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,17 +349,15 @@ export default class DynamicSizeList extends PureComponent<
getSnapshotBeforeUpdate( getSnapshotBeforeUpdate(
prevProps: DynamicSizeListProps, prevProps: DynamicSizeListProps,
prevState: DynamicSizeListState prevState: DynamicSizeListState
) { ): DynamicSizeListSnapshot {
if ( if (this._outerRef) {
const isChangedLocalOlderPostsToRender =
prevState.localOlderPostsToRender[0] !== prevState.localOlderPostsToRender[0] !==
this.state.localOlderPostsToRender[0] || this.state.localOlderPostsToRender[0] ||
prevState.localOlderPostsToRender[1] !== prevState.localOlderPostsToRender[1] !==
this.state.localOlderPostsToRender[1] this.state.localOlderPostsToRender[1];
) {
if (!this._outerRef) {
return;
}
if (isChangedLocalOlderPostsToRender) {
const element = this._outerRef; const element = this._outerRef;
const previousScrollTop = element.scrollTop; const previousScrollTop = element.scrollTop;
const previousScrollHeight = element.scrollHeight; const previousScrollHeight = element.scrollHeight;
@ -364,15 +366,18 @@ export default class DynamicSizeList extends PureComponent<
previousScrollHeight, 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