バーチャルリストのReactコンポーネント

    Virtual Listは独立したReactコンポーネントではなく、<List><ListItem>のReactコンポーネントと、特別なFramework7のVirtual Listコンポーネントを使った特殊なケースに過ぎません。

    バーチャルリストのプロパティ

    PropTypeDefaultDescription
    <List> properties
    virtualListbooleanfalseバーチャルリストの有効化
    virtualListParamsobjectオブジェクトに仮想リストのパラメータを設定します。

    仮想リストイベント

    EventDescription
    <List> events
    virtualItemBeforeInsertアイテムが仮想ドキュメントフラグメントに追加される前にイベントが発生します。
    virtualItemsBeforeInsert現在のDOMリストが削除された後、新しいドキュメントが挿入される前にイベントが発生します。
    virtualItemsAfterInsertイベントは、アイテムが挿入された新しいドキュメントフラグメントの後に発生します。
    virtualBeforeClear現在のDOMリストが削除され、新しいドキュメントフラグメントに置き換えられる前に、イベントが発生します。

    Examples

    仮想リストと、仮想リストのアイテムを検索するサーチバーを使った全ページの例を示します。

    import React, { useState } from 'react';
    import {
      Page,
      Navbar,
      Subnavbar,
      Searchbar,
      Block,
      List,
      ListItem,
      theme,
    } from 'framework7-react';
    
    export default () => {
      const items = [];
      for (let i = 1; i <= 10000; i += 1) {
        items.push({
          title: `Item ${i}`,
          subtitle: `Subtitle ${i}`,
        });
      }
      const [vlData, setVlData] = useState({
        items: [],
      });
    
      const searchAll = (query, searchItems) => {
        const found = [];
        for (let i = 0; i < searchItems.length; i += 1) {
          if (
            searchItems[i].title.toLowerCase().indexOf(query.toLowerCase()) >= 0 ||
            query.trim() === ''
          )
            found.push(i);
        }
        return found; // return array with mathced indexes
      };
      const renderExternal = (vl, newData) => {
        setVlData({ ...newData });
      };
      return (
        
          
        <Page>
          <Navbar title="Virtual List" backLink="Back">
            <Subnavbar inner={false}>
              <Searchbar
                searchContainer=".virtual-list"
                searchItem="li"
                searchIn=".item-title"
                disableButton={!theme.aurora}
              />
            </Subnavbar>
          </Navbar>
          <Block>
            <p>
              Virtual List allows to render lists with huge amount of elements without loss of
              performance. And it is fully compatible with all Framework7 list components such as
              Search Bar, Infinite Scroll, Pull To Refresh, Swipeouts (swipe-to-delete) and
              Sortable.
            </p>
            <p>Here is the example of virtual list with 10 000 items:</p>
          </Block>
          <List className="searchbar-not-found">
            <ListItem title="Nothing found" />
          </List>
          <List
            className="searchbar-found"
            medialList
            virtualList
            virtualListParams={{
              items,
              searchAll,
              renderExternal,
              height: theme.ios ? 63 : theme.md ? 73 : 77,
            }}
          >
            <ul>
              {vlData.items.map((item, index) => (
                <ListItem
                  key={index}
                  mediaItem
                  link="#"
                  title={item.title}
                  subtitle={item.subtitle}
                  style={{ top: `${vlData.topPosition}px` }}
                  virtualListIndex={items.indexOf(item)}
                />
              ))}
            </ul>
          </List>
        </Page>
          
        
      );
    };