首页 > 解决方案 > 如何将 props 和 function 传递给 react-widow 列表?

问题描述

这是react-window插件:https ://github.com/bvaughn/react-window

我正在使用它来呈现“行”的简单列表。

这是Row我尝试传递函数和const idTestProps=''

class Row extends PureComponent {
  render() {
    const { index, style } = this.props;
    let label;
    if (itemStatusMap[index] === LOADED) {
      label = `Row ${index}`;
    } else {
      label = "Loading...";
    }
    return (
      <div className="ListItem" style={style}>
        {label}
      </div>
    );
  }
}

这是Container应该将函数和一个道具传递给comp的Rowcomp:

const outerElementType = forwardRef((props, ref) => (
  <div ref={ref} onClick={handleClick} {...props} />
));

export default function App() {
  return (
    <Fragment>
      <InfiniteLoader
        isItemLoaded={isItemLoaded}
        itemCount={1000}
        loadMoreItems={loadMoreItems}
      >
        {({ onItemsRendered, ref }) => (
          <List
            className="List"
            height={150}
            itemCount={1000}
            itemSize={35}
// This is outerElementType is way to pass some function down to Row
            outerElementType={outerElementType} 
            width={300}
          >
            {Row}
          </List>
        )}
    </Fragment>
  );

我成功通过了“功能”并且可以工作,但property不能。

如何将道具与功能同时传递下去?

这是codesandbox示例: https ://codesandbox.io/s/4zqx79nww0

标签: javascriptreactjstypescriptfrontend

解决方案


我从未使用过 react-window 但也许你可以这样做:

import React, { forwardRef } from "react";
import ReactDOM from "react-dom";
import { FixedSizeList as List } from "react-window";

import "./styles.css";

const Row = props => ({ index, style }) => (
  <div className={index % 2 ? "ListItemOdd" : "ListItemEven"} style={style}>
    Row {index} {props.test}
  </div>
);

function handleOnWheel({ deltaY }) {
  // Your handler goes here ...
  console.log("handleOnWheel()", deltaY);
}

const outerElementType = forwardRef((props, ref) => (
  <div ref={ref} onWheel={handleOnWheel} {...props} />
));

const Example = () => (
  <List
    className="List"
    height={150}
    itemCount={1000}
    itemSize={35}
    outerElementType={outerElementType}
    width={300}
  >
    {Row({ test: "test" })}
  </List>
);

ReactDOM.render(<Example />, document.getElementById("root"));

推荐阅读