tingyuxuan2302 / taro3-virtual-list

基于taro3封装的虚拟列表,对列表节点不等高以及白屏等问题支持友好,无计算量,性能优异,支持各大小程序以及h5页面
MIT License
190 stars 26 forks source link

数据为空时onRenderBottom不展示 #31

Closed zjjjjjjjjjjd closed 1 year ago

zjjjjjjjjjjd commented 1 year ago

除非触发下拉刷新才行

tingyuxuan2302 commented 1 year ago

除非触发下拉刷新才行

我试了一下demo是可以展示的啊,你是什么情况下不展示的,数据为空的时候有去setState吗

zjjjjjjjjjjd commented 1 year ago

我试出来这样有问题:

  1. 设置一个loading
  2. 强刷请求时把loading变为true
  3. 此时显示loading的view,隐藏list
  4. 请求结束后把loading变为false
  5. 这个时候list的底部就不见了
zjjjjjjjjjjd commented 1 year ago
import { TaroVirtualList } from 'taro-virtual-list'

export default function Demo(): JSX.Element {
const [loading,setLoading] = useState(false)
  // 渲染列表Item
  const renderFunc = (item, index, pageIndex) => {
    return (
      <View className="el">{`当前是第${item}个元素,是第${pageIndex}屏的数据`}</View>
    )
  }
  const onPageScrollToLower = () => {
    // 执行分页数据请求
  }

  useEffect(() => {
  // 控制loading
  },[])

  return (
    <View>
    {loading ? 'laoding' :  <TaroVirtualList
        autoScrollTop={false}
        listType="multi"
        list={list}
        pageNum={页码}
        segmentNum={每页的数据量}
        onRenderBottom={() => <View>底部</View>}
        onRender={renderFunc}
        scrollViewProps={{
          onScrollToLower: onPageScrollToLower,
          lowerThreshold: 50,
          style: {
            "height": '100vh',
          },
        }}
      />}

    </View>
  )

}

伪代码

tingyuxuan2302 commented 1 year ago

我试出来这样有问题:

  1. 设置一个loading
  2. 强刷请求时把loading变为true
  3. 此时显示loading的view,隐藏list
  4. 请求结束后把loading变为false
  5. 这个时候list的底部就不见了

onRenderLoad,用这个方法去渲染loading,或者不要将组件直接销毁,可以将组件用样式隐藏

zjjjjjjjjjjd commented 1 year ago

我试出来这样有问题:

  1. 设置一个loading
  2. 强刷请求时把loading变为true
  3. 此时显示loading的view,隐藏list
  4. 请求结束后把loading变为false
  5. 这个时候list的底部就不见了

onRenderLoad,用这个方法去渲染loading,或者不要将组件直接销毁,可以将组件用样式隐藏

onRenderBottom 有这么一个问题,数据超过两页的时候,我使用了onRefresherRefresh 准备重置整个列表,这个时候onRenderBottom就没了

tingyuxuan2302 commented 1 year ago

onRefresh是什么方法,没有这个方法啊,重置列表去改变list就好了

zjjjjjjjjjjd commented 1 year ago

没有

看了代码 isComplete 这个值在list有变化,且pageNum从2变到1的时候被置为false了 没明白为啥要用这个isComplete去控制底部渲染呢?QAQ

zjjjjjjjjjjd commented 1 year ago

onRefresh是什么方法,没有这个方法啊,重置列表去改变list就好了

onRefresherRefresh是scrollview提供的最顶部的下拉操作,理解为把页面整个拉下来一部分,一般是用于重置整个列表

zjjjjjjjjjjd commented 1 year ago

onRefresh是什么方法,没有这个方法啊,重置列表去改变list就好了

可能是listType === "single"的时候有用,因为我们整个业务没有使用到全量加载,大胆认为“multi”模式可以忽略isComplete控制了