Виртуализированная таблица InfiniteLoader не обновляется - PullRequest
1 голос
/ 30 мая 2020

У меня есть компонент («События»), который показывает события в таблице внутри InfiniteLoader. Функция loadMoreRows загружает данные из конечной точки службы. Довольно простой материал. Проблема в том, что таблица не обновляется строками, загруженными с помощью loadMoreRows. В таблице показана только жестко запрограммированная запись, с которой определяется list. Я вижу, что вызывается loadMoreRows и обновляется list. FWIW, этот компонент загружен в панель управления Material-UI.

Мне кажется, что я упускаю что-то простое ... Но я долго бился над этим и полагаю, что должен просто попросите о помощи.

Вот компонент

const list = [
  {
    event: '123123-5eb4-498f-9d3a-123123123123',
    url: 'blahblha',
    category: 'Amazing Widgets',
  },
];

const remoteRowCount = 1000;

export default class Event extends React.PureComponent {
  constructor(props, context) {
    super(props, context);
    const sortDirection = SortDirection.ASC;
    this.props = props;
    this.state = {
      sortDirection,
    };
  }

  isRowLoaded({index}) {
    return !!list[index];
  }

  loadMoreRows({ startIndex, stopIndex }) {
    console.log('finding', startIndex, stopIndex);
    return eventService.find().then(data => {
      for (let i = 0; i < data.length; i++) {
        list.push({
          event: data[i].event_id,
          url: data[i].page_url,
          category: data[i].se_category,
        });
      }
      console.log(list);
    });
  }

  // Render your list
  render() {
    return (
      <InfiniteLoader
        isRowLoaded={this.isRowLoaded}
        loadMoreRows={this.loadMoreRows}
        rowCount={remoteRowCount}
      >
        {({ onRowsRendered, registerChild }) => (
          <Table
            ref={registerChild}
            onRowsRendered={onRowsRendered}
            headerHeight={40}
            width={300}
            height={300}
            rowHeight={40}
            rowCount={list.length}
            rowGetter={({index}) => list[index]}
          >
            <Column label="Event" dataKey="event" width={300}/>
            <Column label="Url" dataKey="url" width={400}/>
            <Column label="Category" dataKey="category" width={100}/>
          </Table>
        )}
      </InfiniteLoader>
    );
  }
}

Вот первые 6 элементов в списке после завершения loadMoreRows.

0: {event: "123123-5eb4-498f-9d3a-123123123123", url: "blahblha", category: "Amazing Widgets"}
1: {event: "dbcbb9af-2ab0-47c1-8acc-94ee1aef451d", url: "blahblha", category: "Bing Bong"}
2: {event: "bd134bbf-a227-4fb4-b3ea-28ae0e267a10", url: "blahblha", category: "Bing Bong"}
3: {event: "9aefce0c-fcbe-4e9e-b20c-28fcff7c6f14", url: "blahblha", category: "Bing Bong"}
4: {event: "32d13a5f-c2d8-448d-9bdf-5f23f95ff12b", url: "blahblha", category: "Bing Bong"}
5: {event: "e0e7d374-5d97-4d63-836e-d31ca302143f", url: "blahblha", category: "Bing Bong"}
6: {event: "88e60b53-3f8e-4e1d-bbd7-ef3fea0ade1d", url: "blahblha", category: "Bing Bong"}

как я уже сказал, я вижу только элемент 0.

ошибок нет

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...