如何将道具和功能传递给反应寡妇列表?

时间:2019-08-15 13:15:11

标签: javascript reactjs typescript frontend

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

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

这是Row个comp,我尝试在其中传递函数和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,应该将功能和一个道具传递给Row comp:

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

1 个答案:

答案 0 :(得分:1)

我从未使用过反应窗口,但也许您可以执行以下操作:

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"));