9

是否可以同时使用反应虚拟化和酶?当我尝试将它们一起使用时,我似乎在网格中得到了一个空的项目列表。

4

3 回答 3

5

2应该一起工作,是的。我认为可能的问题是 react-virtualized 组件的宽度或高度为 0,这导致它不渲染任何东西。(它只渲染到足以填满它所拥有的“窗口”。)

假设您使用的是 AutoSizer HOC——(大多数人都这样做)——那么我发现一种有用的模式是导出 2 个版本的组件——一个需要明确的宽度/高度属性,一个用 AutoSizer 包装另一个。伪代码将是:

import { AutoSizer, VirtualScroll } from 'react-virtualized'

// Use this component for testing purposes so you can explicitly set width/height
export function MyComponent ({
  height,
  width,
  ...otherProps
}) {
  return (
    <VirtualScroll
      height={height}
      width={width}
      {...otherProps}
    />
  )
}

// Use this component in your browser where auto-sizing behavior is desired
export default function MyAutoSizedComponent (props) {
  return (
    <AutoSizer>
      ({ height, width }) => (
        <MyComponent
          height={height}
          width={width}
          {...props}
        />
      )
    </AutoSizer>
  )
}
于 2016-06-14T22:20:27.540 回答
4

从 react-virtualized 9.12.0 开始,Autosizer 具有defaultWidthdefaultHeight属性。我发现设置这些意味着酶测试运行正确 - 按预期呈现子行。

<AutoSizer disableHeight defaultWidth={100}>
    {({ width }) => (
  ....
  )}
</AutoSizer>
于 2017-11-20T15:56:47.267 回答
2

把它放在我的测试用例中对我有用:

import { AutoSizer } from 'react-virtualized';

// ...

it('should do something', function() {
    spyOn(AutoSizer.prototype, 'render').and.callFake(function render() {
        return (
            <div ref={this._setRef}>
                {this.props.children({ width: 200, height: 100 })}
            </div>
        );
    });

    // do something...

我在这里使用 Jasmine 的 spyOn,但其他库有自己的覆盖函数的方式。请记住,这对于将来对 react-virtualized 库的更改(this._setRef刚刚从源代码中提取)非常脆弱,并且可能会给您带来误报。

于 2016-12-16T07:08:08.123 回答