# MMFlatListRefresh 下拉加载更多与上拉刷新

# Props

# IFlatListRefreshProps

属性 类型 默认值 必传 说明
data T[] 是 数据源
state MMFlatListRefreshState 是 状态
noMore boolean 是 没有更多
noMoreText ReactNode 否 没有更多的文案
noMoreTextDelay number 否 没有更多的文案延迟显示时间
empty ReactNode 否 渲染空数据组件
renderFooter ReactNode 否 渲染底部
height number 否 容器高度
bottom number 否 底部距离
disablePull boolean false 否 是否禁用下拉刷新
showScrollbar boolean true 否 是否显示滚动条
renderItem (info: { item: T; index: number;}) => ReactNode 是 定义如何渲染每一行的组件

# 代码示例

import { FC, memo, useEffect, useState } from "react";
import { View, Text } from "@tarojs/components";
import MMNavigation from "../../components/navigation/index";
import { guid } from "@wmeimob/utils/src/guid";
import MMFlatListRefresh from "../../components/flat-list-refresh";
import useMMFlatList from "../../components/flat-list-refresh/useMMFlatList";
import MMEmpty from "../../components/empty";
import MMCell from "../../components/cell";
import MMButton from "../../components/button";

const Component: FC<{}> = (props) => {
  const [emptyData, setEmptyData] = useState(false);

  const [info, pullToRefresh] = useMMFlatList({
    initRequest: false,
    params: { pageSize: 100 }, // 充当全量,若业务场景会超过该数值,可改大
    getData: (pa) => {
      return new Promise<any>((resolve) => {
        setTimeout(() => {
          resolve({
            data: {
              isLastPage: emptyData ? true : pa.pageNum === 2,
              // list: []
              list: emptyData
                ? []
                : [...Array.from({ length: 20 })].map((item) => ({
                    id: guid(),
                  })),
            },
          });
        }, 1000);
      });
    },
  });

  useEffect(() => {
    pullToRefresh.onRefresh();
  }, [emptyData]);

  return (
    <View>
      <MMNavigation title="MMPullToRefresh" />

      <MMFlatListRefresh
        {...pullToRefresh}
        empty={
          <MMEmpty
            onClick={() => setEmptyData(false)}
            text="没有数据(点我恢复)"
          />
        }
        renderItem={({ item, index }) => {
          return (
            <MMCell title={item.id.slice(0, 25)} size="large">
              {index === 0 && (
                <MMButton
                  size="small"
                  onClick={() => {
                    setEmptyData(true);
                  }}
                  text="点击无数据"
                />
              )}
            </MMCell>
          );
        }}
        renderFooter={
          <View>
            <MMButton text="renderFooter" />
          </View>
        }
      />
    </View>
  );
};

const MMFlatListsRefreshPage = memo(Component);
export default MMFlatListsRefreshPage;