jdf2e / nutui-react

京东风格的移动端 React 组件库 、支持多端小程序(A React UI Toolkit for Mobile Web)
https://nutui.jd.com/react/
901 stars 259 forks source link

VirtualList 虚拟列表,顶部下拉会白屏 #1517

Open xiaocode337317439 opened 1 year ago

xiaocode337317439 commented 1 year ago

NutUI React 包名

@nutui/nutui-react-taro

NutUI React 版本号

2.0.19

平台

weapp

重现链接

重现步骤

https://github.com/jdf2e/nutui-react/assets/21286091/eaa648b1-97f7-4020-8d0a-6280d756980d

JavaScript <VirtualList containerHeight={containerHeight} list={listData} itemRender={itemRender} itemHeight={173} overscan={10} /> containerHeight是计算出的屏幕剩余高度

期望的结果是什么?

VirtualList下拉不要白屏

实际的结果是什么?

下拉会白屏

环境信息

👽 Taro v3.6.17

Taro CLI 3.6.17 environment info: System: OS: macOS 12.7 Shell: 5.8.1 - /bin/zsh Binaries: Node: 18.18.0 - /usr/local/bin/node Yarn: 1.22.18 - /usr/local/bin/yarn npm: 10.1.0 - /usr/local/bin/npm npmPackages: @tarojs/cli: 3.6.17 => 3.6.17 @tarojs/components: 3.6.17 => 3.6.17 @tarojs/helper: 3.6.17 => 3.6.17 @tarojs/plugin-framework-react: 3.6.17 => 3.6.17 @tarojs/plugin-html: ^3.6.17 => 3.6.17 @tarojs/plugin-platform-alipay: 3.6.17 => 3.6.17 @tarojs/plugin-platform-h5: 3.6.17 => 3.6.17 @tarojs/plugin-platform-jd: 3.6.17 => 3.6.17 @tarojs/plugin-platform-qq: 3.6.17 => 3.6.17 @tarojs/plugin-platform-swan: 3.6.17 => 3.6.17 @tarojs/plugin-platform-tt: 3.6.17 => 3.6.17 @tarojs/plugin-platform-weapp: 3.6.17 => 3.6.17 @tarojs/react: 3.6.17 => 3.6.17 @tarojs/runtime: 3.6.17 => 3.6.17 @tarojs/shared: 3.6.17 => 3.6.17 @tarojs/taro: 3.6.17 => 3.6.17 @tarojs/taro-loader: 3.6.17 => 3.6.17 @tarojs/webpack5-runner: 3.6.17 => 3.6.17 babel-preset-taro: 3.6.17 => 3.6.17 eslint-config-taro: 3.6.17 => 3.6.17 react: ^18.0.0 => 18.2.0

其他补充信息

No response

xiaocode337317439 commented 1 year ago
你们自己的小程序,虚拟列表顶部下拉也会白屏
xiaocode337317439 commented 1 year ago
const listScroll = (e) => {
    // 这里没有处理下拉变成负数的情况
    const scrollTop = Math.max(e.detail ? e.detail.scrollTop : e.target.scrollTop, 0);
    const scrollSize = Math.floor(scrollTop);
    const startIndex = binarySearch(positions, false, scrollSize);
    const overStart = startIndex - overscan > -1 ? startIndex - overscan : 0;
    const endIndex = end();
    if (!itemEqual) {
      updateTotalSize();
    }
    setStart(Math.floor(scrollTop / itemHeight));
    setOptions({ startOffset, startIndex, overStart, endIndex });
    if (end() > list.length - 1) {
      onScroll && onScroll();
    }
    setStartOffset(scrollTop - scrollTop % itemHeight);
  };
zhongjiaguo001 commented 11 months ago

有解决方案了吗,这种体验很差的

xiaocode337317439 commented 11 months ago

有解决方案了吗,这种体验很差的 源码中修改,自己实现一个插件或者直接node动态找到源码文件动态修改 // 这里没有处理下拉变成负数的情况 const scrollTop = Math.max(e.detail ? e.detail.scrollTop : e.target.scrollTop, 0);

const scrollTop = Math.max(e.detail ? e.detail.scrollTop : e.target.scrollTop, 0);