# 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;