refactor: 调整参数与类型使其更加合理

pull/13/head
moonrailgun 3 years ago
parent 082909f3d6
commit 41afc64cce

@ -1,4 +1,6 @@
import DynamicSizeList, { import {
DynamicSizeList,
DynamicSizeRenderInfo,
OnScrollInfo, OnScrollInfo,
} from '@/components/DynamicVirtualizedList/DynamicSizeList'; } from '@/components/DynamicVirtualizedList/DynamicSizeList';
import { Divider } from 'antd'; import { Divider } from 'antd';
@ -118,7 +120,7 @@ export const VirtualizedMessageList: React.FC<VirtualizedMessageListProps> =
/** /**
* *
*/ */
const renderRow = ({ itemId }: any) => { const renderRow = ({ itemId }: DynamicSizeRenderInfo) => {
if (itemId === messageReverseItemId.OLDER_MESSAGES_LOADER) { if (itemId === messageReverseItemId.OLDER_MESSAGES_LOADER) {
return ( return (
<div key={itemId} className="text-center text-gray-400"> <div key={itemId} className="text-center text-gray-400">
@ -197,6 +199,7 @@ export const VirtualizedMessageList: React.FC<VirtualizedMessageListProps> =
height={height} height={height}
width={width} width={width}
itemData={itemData} itemData={itemData}
renderItem={renderRow}
overscanCountForward={OVERSCAN_COUNT_FORWARD} overscanCountForward={OVERSCAN_COUNT_FORWARD}
overscanCountBackward={OVERSCAN_COUNT_BACKWARD} overscanCountBackward={OVERSCAN_COUNT_BACKWARD}
onScroll={handleScroll} onScroll={handleScroll}
@ -208,9 +211,7 @@ export const VirtualizedMessageList: React.FC<VirtualizedMessageListProps> =
initRangeToRender={initRangeToRender} initRangeToRender={initRangeToRender}
loaderId={messageReverseItemId.OLDER_MESSAGES_LOADER} loaderId={messageReverseItemId.OLDER_MESSAGES_LOADER}
correctScrollToBottom={isBottom} correctScrollToBottom={isBottom}
> />
{renderRow}
</DynamicSizeList>
)} )}
</AutoSizer> </AutoSizer>
); );

@ -151,9 +151,14 @@ export interface OnScrollInfo {
scrollHeight: number; scrollHeight: number;
} }
export interface DynamicSizeRenderInfo {
data: string[];
itemId: string;
}
interface DynamicSizeListProps { interface DynamicSizeListProps {
canLoadMorePosts: () => void; canLoadMorePosts: () => void;
children: (info: { data: string[]; itemId: string }) => React.ReactElement; renderItem: (info: DynamicSizeRenderInfo) => React.ReactElement;
height: number; height: number;
initRangeToRender: number[]; initRangeToRender: number[];
initScrollToIndex: () => { initScrollToIndex: () => {
@ -199,7 +204,7 @@ type DynamicSizeListSnapshot = {
/** /**
* loader * loader
*/ */
export default class DynamicSizeList extends PureComponent< export class DynamicSizeList extends PureComponent<
DynamicSizeListProps, DynamicSizeListProps,
DynamicSizeListState DynamicSizeListState
> { > {
@ -866,7 +871,7 @@ export default class DynamicSizeList extends PureComponent<
}; };
_renderItems = () => { _renderItems = () => {
const { children, itemData, loaderId } = this.props; const { renderItem, itemData, loaderId } = this.props;
const width = this.innerRefWidth; const width = this.innerRefWidth;
const [startIndex, stopIndex] = this._getRangeToRender(); const [startIndex, stopIndex] = this._getRangeToRender();
const itemCount = itemData.length; const itemCount = itemData.length;
@ -896,7 +901,7 @@ export default class DynamicSizeList extends PureComponent<
isItemInLocalPosts || isItemInLocalPosts ||
isLoader isLoader
) { ) {
const item: React.ReactElement = children({ const item: React.ReactElement = renderItem({
data: itemData, data: itemData,
itemId, itemId,
}); });
@ -991,18 +996,14 @@ export default class DynamicSizeList extends PureComponent<
// I assume people already do this (render function returning a class component), // I assume people already do this (render function returning a class component),
// So my doing it would just unnecessarily double the wrappers. // So my doing it would just unnecessarily double the wrappers.
const validateProps = ({ children, itemSize }: any) => { const validateProps = ({ renderItem }: DynamicSizeListProps) => {
if (process.env.NODE_ENV !== 'production') { if (process.env.NODE_ENV !== 'production') {
if (children == null) { if (renderItem == null) {
throw Error( throw Error(
'An invalid "children" prop has been specified. ' + 'An invalid "renderItem" prop has been specified. ' +
'Value should be a React component. ' + 'Value should be a React component. ' +
`"${children === null ? 'null' : typeof children}" was specified.` `"${renderItem === null ? 'null' : typeof renderItem}" was specified.`
); );
} }
if (itemSize !== undefined) {
throw Error('An unexpected "itemSize" prop has been provided.');
}
} }
}; };

Loading…
Cancel
Save