返回

H5开发翻车记:pullToRefresh组件不生效的奇妙旅程

前端

各位H5开发的小伙伴们,大家好!今天我想和大家分享我在开发过程中遇到的一个奇妙翻车经历。话说我最近在使用antd-mobile的pullToRefresh组件,结果遇到了上拉加载不生效的怪问题,让我着实折腾了好久。

我们先来回顾一下pullToRefresh组件的用法。它是一个下拉刷新和上拉加载的组件,可以通过设置onRefresh和onLoad方法来实现刷新和加载更多的功能。我的代码如下:

import { PullToRefresh } from 'antd-mobile';

const App = () => {
  const [refreshing, setRefreshing] = useState(false);
  const [loading, setLoading] = useState(false);

  const onRefresh = () => {
    // do something
    setRefreshing(false);
  };

  const onLoad = () => {
    // do something
    setLoading(false);
  };

  return (
    <PullToRefresh
      refreshing={refreshing}
      onRefresh={onRefresh}
      loading={loading}
      onLoad={onLoad}
    >
      {/* ... */}
    </PullToRefresh>
  );
};

按照这个代码,我本以为一切正常,但是上拉加载却怎么也不生效。我检查了代码,确认了onRefresh和onLoad方法都写对了,而且组件的用法也没有问题。百思不得其解,我开始怀疑是不是组件本身的问题。

于是,我打开antd-mobile的文档,仔细研读了一番,发现了一个非常重要的细节:pullToRefresh组件需要在滚动容器内使用 。换句话说,它不能直接放在页面上,而必须包裹在一个可以滚动的元素中。

我恍然大悟,原来是我疏忽了这一点。于是,我将代码修改如下:

import { PullToRefresh } from 'antd-mobile';

const App = () => {
  const [refreshing, setRefreshing] = useState(false);
  const [loading, setLoading] = useState(false);

  const onRefresh = () => {
    // do something
    setRefreshing(false);
  };

  const onLoad = () => {
    // do something
    setLoading(false);
  };

  return (
    <div style={{ height: '100vh', overflow: 'scroll' }}>
      <PullToRefresh
        refreshing={refreshing}
        onRefresh={onRefresh}
        loading={loading}
        onLoad={onLoad}
      >
        {/* ... */}
      </PullToRefresh>
    </div>
  );
};

经过修改后,上拉加载终于正常工作了。我终于松了一口气,原来是这么一个简单的问题。

这一次翻车经历让我明白,在开发过程中,一定要仔细阅读文档,注意细节。只有这样,才能避免不必要的麻烦。希望我的分享能够给各位小伙伴带来一些启发,祝大家开发顺利!