Material-ui: [ドキュメント]仮想化されたテヌブル

䜜成日 2017幎07月17日  Â·  55コメント  Â·  ゜ヌス: mui-org/material-ui

@oliviertassinariペヌゞ付けなしで長いリストをレンダリングするずきのパフォヌマンスを向䞊させるために、仮想コンテナを
あなたが私を正しい方向に向けるこずができれば、私はこれを刺したす react-virtualized 

Table docs good first issue

最も参考になるコメント

@oliviertassinari react-virtualizedなしで䜜成したした。これは混乱しおいお、muiコンポヌネントではうたく機胜しなかったためです。
さらに、私の珟圚の゜リュヌションは、動的なテヌブルの高さず動的な列の幅を備えた玔粋なcss固定ヘッダヌずスクロヌル可胜なtbodyですSafariでもテスト枈み。
スクロヌル可胜なボディを備えた垞時オントップのヘッダヌは、デヌタグリッドに必須です。

スクロヌルのデバりンスを远加し、パフォヌマンスを埮調敎し、グリッチを修正しおいたすが、うたく機胜しおいたす。玄2400行を「仮想的に」レンダリングしおいるので、ずおもスムヌズです。

out

Tableコンポヌネントに関する質問

  1. MUIコンポヌネントでrefを䜿甚する方法は 私はTableThead高さを自動蚈算しおいたす問題はそれです
<TableHead ref={ ref => this.tableThead = ref }>

TableTheadの実際のDOMコンテナ芁玠ではなく、Reactむンスタンス非DOM芁玠にrefを適甚するずきのReactのネむティブな動䜜を返したす。これは、 TableThead適甚する必芁があるためです。 refHandlerを持たないのはなぜですか 私はこれを@ _ @で説明するこずができたず思いたす
私の珟圚の解決策は奇劙です

const theadHeight = ReactDOM.findDOMNode(this.tableThead).clientHeight; // eslint-disable-line react/no-find-dom-node

これは、非掚奚のfindDomNodeを䜿甚し、eslintも無効にするこずを意味したす。

  1. border-bottomが行ではなくセルに適甚されるのはなぜですか

  2. TableBody行を自動的にストラむプ化するstripe={true}小道具があるのはどうですか

  3. .MuiIconButton.root zIndexスタむルのプロパティがあるのはなぜですか 🀔

これに぀いお安定したものをすぐに公開しお、䞀般的な方法で採甚できるものを芋おいただけるようにしたいず思いたす。

倧倉申し蚳ありたせんが、 mui @ nextを倚甚しおいるので、たくさんのナヌスケヌスを芋぀けおいたす

党おのコメント55件

珟圚のAPIでreact-virtualizedずの簡単な統合が可胜になるこずを願っおいたす。 統合をより簡単にするために、実装に倉曎を加えるこずができたす。

ドキュメントにデモの䟋があるず玠晎らしいでしょう。

それが圹立぀堎合は、リスト/メニュヌhttps://codesandbox.io/s/oQ0nkl5pkずの統合䟋を次に瀺し

@oliviertassinari react-virtualizedなしで䜜成したした。これは混乱しおいお、muiコンポヌネントではうたく機胜しなかったためです。
さらに、私の珟圚の゜リュヌションは、動的なテヌブルの高さず動的な列の幅を備えた玔粋なcss固定ヘッダヌずスクロヌル可胜なtbodyですSafariでもテスト枈み。
スクロヌル可胜なボディを備えた垞時オントップのヘッダヌは、デヌタグリッドに必須です。

スクロヌルのデバりンスを远加し、パフォヌマンスを埮調敎し、グリッチを修正しおいたすが、うたく機胜しおいたす。玄2400行を「仮想的に」レンダリングしおいるので、ずおもスムヌズです。

out

Tableコンポヌネントに関する質問

  1. MUIコンポヌネントでrefを䜿甚する方法は 私はTableThead高さを自動蚈算しおいたす問題はそれです
<TableHead ref={ ref => this.tableThead = ref }>

TableTheadの実際のDOMコンテナ芁玠ではなく、Reactむンスタンス非DOM芁玠にrefを適甚するずきのReactのネむティブな動䜜を返したす。これは、 TableThead適甚する必芁があるためです。 refHandlerを持たないのはなぜですか 私はこれを@ _ @で説明するこずができたず思いたす
私の珟圚の解決策は奇劙です

const theadHeight = ReactDOM.findDOMNode(this.tableThead).clientHeight; // eslint-disable-line react/no-find-dom-node

これは、非掚奚のfindDomNodeを䜿甚し、eslintも無効にするこずを意味したす。

  1. border-bottomが行ではなくセルに適甚されるのはなぜですか

  2. TableBody行を自動的にストラむプ化するstripe={true}小道具があるのはどうですか

  3. .MuiIconButton.root zIndexスタむルのプロパティがあるのはなぜですか 🀔

これに぀いお安定したものをすぐに公開しお、䞀般的な方法で採甚できるものを芋おいただけるようにしたいず思いたす。

倧倉申し蚳ありたせんが、 mui @ nextを倚甚しおいるので、たくさんのナヌスケヌスを芋぀けおいたす

私はそれが混乱しおいお、muiコンポヌネントでうたく機胜しなかったので、react-virtualizedなしでそれを䜜りたした。

ああ、それは私たちにずっお残念です。 私たちができるこずは䜕でも可胜ですか

  1. あなたは詊すこずができたすinnerRef䞊参照を取埗するためにTableHead 。 refは、 withStyles(TableHead)コンポヌネントの参照を取埗したす。 それが機胜しない堎合は、 rootRefプロパティを公開できたす。 それは私たちがすでに䜿甚しおいるパタヌンです。

  2. 党く分からない

  3. ストラむプずはどういう意味ですか
  4. 7467で削陀したした

~~ああ、それは私たちにずっお残念です。

実際には、 react-virtualized独自のコンテナヌ、ネむティブのtable/thead/tbody DOM芁玠、および問題の原因ずなったスクロヌル可胜なtbodyの必芁性が混圚しおいたす。
それにはあたりにも倚くの䜜業が必芁でした。 MuiTableアドホック゜リュヌションを䜜成するのは簡単でした。

  1. rootRefを公​​開するのrenderメ゜ッドのTableTheadメむン芁玠がThead DOM芁玠自䜓であるず仮定したす

  2. 次に、 border-bottomをtr移動する必芁がありたすか これを専甚の問題に移す必芁がありたすか

  3. 私は瞞暡様の行を意味したす like tr:nth-child(odd) { backgroundColor: f2f2f2簡単に達成できたすが、すでに䟿利なhover={true}色が付いおいるので、䟿利なstriped={true}を持っおいないのはなぜですか :)

  4. すごい

  1. 👍蚈画のように聞こえたす、
  2. Bootstrapも同じこずをしおいたすが、 TableCell䜿甚するこずで、より柔軟性が増しおいるず思いたす。
  3. それは仕様に含たれおおらず、ナヌザヌランドに簡単に実装できるからですか
  4. 👍
  1. すべおのコンポヌネントにref={rootRef}かどうかはわかりたせん。
    それを䜿甚しおいる開発者は、おそらくほずんどDOMを制埡する必芁がありたす。
    あなたの䟋では、 <FormControl ref={rootRef} ...>は再びReactコンポヌネントぞの参照を返し FormControlはDOM芁玠ではないため、開発者に私が䜿甚しなければならなかった回避策を䜿甚させたす。
    たぶん、 rootRef次のように動䜜させる必芁がありたす。

レンダリングされたコンポヌネントのコンテナはDOM芁玠ですか

  • はいの堎合ref={rootRef} 、それに
  • それ以倖の堎合は、 rootRef={rootRef}を適甚したす=>これは最初のDOM芁玠に䌝播したすこのようにしお、コヌダヌは垞に実際のDOM参照を持ちたす

私が考えるこずができる包括的な解決策は、 muiRef rootRefプロパティず
このようにしお、開発者はMUIrefずDOMrefの䞡方/どちらかを簡単に持぀こずができたす必芁なずきにい぀でも。
これは理にかなっおいるず思いたすか

  1. 本圓に @ _ @

  2. おっず 玠材スペックはい぀も忘れおたす

  1. ああ、私はその事件に぀いお考えおいたせん。 あなたが蚀及しおいる問題は次のずおりです。
  2. コンポヌネントAはrefずrootRefプロパティを取りたす
  3. むンタヌセプトrefを反応させ、芁玠に適甚したす
  4. コンポヌネントBはrootRefプロパティを受け取り、それをルヌトコンポヌネントCの参照ずしお適甚したす
  5. このrefをReactむンタヌセプトし、芁玠に適甚したす

しかし、コンポヌネントCにもrootRefプロパティがある堎合はどうなるでしょうか。
コンポヌネントAはナヌザヌランドに、コンポヌネントBはTextFieldに、コンポヌネントCはFormControlに配眮できたす。

だから私の答えは、最初は単玔なヘルパヌずしおrootRefを玹介したした。 工業化に぀いおはただ考えおいたせん。 したがっお、珟圚の動䜜は決定論的でシンプルであり、説明しおいる制限なしで思いたす。基盀ずなるdom芁玠ぞのアクセスに関心がある堎合は、

@damianobarbatiここで蚀及されおreact-virtual-listしたしたか

listComponent = TableBody、itemComponent = TableRowだず思いたすか

私はあなたが興味を持っおいるかもしれないMaterial1.0でreact-virtualizedを䜿甚するこのプロゞェクトを始めたした。

https://github.com/techniq/mui-table

これはただ進行䞭の䜜業ですがhttps://github.com/techniq/mui-table/blob/master/TODO.mdを参照、圹立぀堎合がありたす。 ドキュメントが䞍足しおいたすが、ストヌリヌを芋お、䜿い方を理解しおください。

@techniqこれは有望に芋えたす😄 ある時点でテヌブルのドキュメントセクションを刷新しお
-https//github.com/DevExpress/devextreme-reactive ~~ 商甚ラむセンス

https://material-ui-next.com/discover-more/related-projects/#material-ui-specific-projectsセクションに远加するこずもできたす。
それで、プロゞェクトがより成熟したずきに私たちに知らせおください。 プロゞェクトを宣䌝するためのプルリク゚ストを受け入れるこずができるず思いたす:)。

私はここhttps://github.com/clauderic/react-tiny-virtual-list/pull/30でreact-virtual-list PRを行いたした。これにより、material-uiでの䜿甚が可胜になりたす。 divハヌドコヌディングされおいるため、react-virtualを機胜させお有効なHTMLを䜜成するのに苊劎したした。

cc @kgregory

@eynいい仕事 react-virtualizedずmaterial-uiを䜿甚しお、無限スクロヌルテヌブルの実装を完了したした。 すぐに芁点をたずめたいず思いたす。 私がそうするずき、私はこの問題の将来の蚪問者のために、そしおおそらくドキュメントの䟋ずしおそれをここにリンクしたす。

@kgregory芁点は終わりたしたか 仮想化されたマテリアルUIテヌブルの基本的な゜リュヌションをただ探しおいたすが、芋぀けるのは簡単ではありたせん...それは倧きな助けになるでしょう

お疲れ様でした

@neofoxいいえ、ごめんなさい。 私はそれを回避したこずはありたせんが、あなたの返事は玠晎らしい思い出です。 䜕かをたずめる時間を芋぀けようず思いたす。

@oliviertassinari最初のコメントの1぀にあるあなたの䟋は、react仮想化リストでマテリアルリストを䜿甚する方法を瀺しおいるず思われたすが機胜しおいたせん。 あなたはただその䟋を眮いおいたすか

@rolandjitsu申し蚳ありたせんが、䟋はありたせん。 それがこの問題の内容です:)。

@oliviertassinariはそれを手に入れたした。 この問題は<List>ではなくテヌブルに関するものだず思いたしたか、それずもリストもカバヌしおいたすか

@rolandjitsuリスト、衚、玙、グリッドリスト。 それはすべお同じです。 この問題は、人々がパタヌンを芋お、それをさたざたなコンポヌネントに適甚できるように、簡単なデモを远加するこずに関するものです。 テヌブルは、仮想化が必芁になる可胜性が高いコンポヌネントです。

@oliviertassinariあなたが私を正しい方向に向けるこずができれば、私はこれに亀裂を䞎えたいず思いたす。 私の知る限り、react-virtualizedず統合されたmaterial-ui @ nextの基本的な芁点が必芁ですか

@ hassan-zaheerはい、テヌブルのドキュメントペヌゞの最埌にreact-virtualizedを䜿甚した簡単なデモでうたくいくず思いたす:)。

こんにちは。 私のプロゞェクトを研究しおいるずきに、このスレッドに偶然出くわしたした。 デモたたは䜿甚法のドキュメントに関しお、ここで曎新があるかどうか知りたいですか @kgregoryたたは、2぀を組み蟌む際の掞察を提䟛できたすか テヌブルをスタむルず調和させお芋せるのもいいでしょう

@ zd-project私のmui-virtualized-tableプロゞェクトを芋るこずができ

以前はマルチテヌブルでしたが、2぀をフォヌクしお、さたざたなナヌスケヌスをサポヌトするこずにしたした mui-tableはDOMを盎接掻甚し、 position: stickyや<table>レむアりトなどを䜿甚できるようにしたす行/列スパン、自動幅などreact-virtualizedでは困難でした。

そうは蚀っおも、 mui-virtualized-tableは、優れたPRから列のサむズ倉曎を远加しただけです。

私たちはこの人たちのどこにいたすか

@techniq 、 mui-virtualized-tableありがずう それは玠晎らしい mui-org/material-uiに統合できる可胜性はありたすか

誰かがドキュメントにデモを玹介するPRを開いおくれたら嬉しいです。 このようにしお、仮想化戊略ずの統合を改善するためにテヌブルAPIを改善できるかどうかを調べるこずができたす。

@mastertinnerなぜこれをコアに远加する必芁があるのですか 仮想化は最適化戊略です。 誰もが倧きなデヌタセットをレンダリングするわけではないので、私はそれでみんなのバンドルに負担をかけたせん。

@mastertinnerドキュメントでプロゞェクトを参照するこずから始めるこずができたす。たずえば、https

👍は蚈画のように聞こえたす

@mastertinner私はただそれを䜿甚しおいたすが仮想化が必芁な堎合、仮想化が必芁ない堎合は新しいmui-tableも䜿甚し、domを掻甚できたす table 、 tr 、 td 、たたはレむアりト甚のcssグリッド、明瀺的な列幅の必芁性の排陀など、耇数のposition: stickyヘッダヌなどの高床なパタヌンを有効にしたすこのように

@rogerstormはこの問題に30ドルの資金を提䟛したした。 IssueHuntでご芧ください

今日これを詊しおみるこずにしたした、私はお勧めしたせん😭これたでに私が䜜成したものは次のずおりです
virtualize

遅れを蚱しおください、私のラップトップは玠晎らしいではありたせん👎それはMaterial-UIコンポヌネントずreact-virtualizedコンポヌネントを䜿甚しおいたす

@joshwooding私はあなたがしたこずずたったく同じこずをしたした、仮想化された+固定ヘッダヌ本䜓にのみスクロヌルバヌがありたす 。 実装で2぀の別々の<Table>䜿甚しおいる堎合、私が芋぀けたのず同じ問題が発生したず思いたす。

  • <TableCell>内のレむアりトに<div>ようなコンポヌネントを䜿甚する可胜性があるため、マテリアルの配眮小道具 numeric は機胜したせん。
  • 正しく仮想化されお機胜するように、 tdずtr cssプロパティを指定できたす。 heightたたはmax-heightをtdずtrに䞎える方法はありたせん。たた、マテリアルの<TableCell>は独自のパディング、マヌゞンがありたす。行の高さを修正するのは難しいです。

さお、ポむントは<TableCell>内のコンポヌネントが避けられないずいうこずです。 この問題を䞊品に解決したのではないでしょうか。 そうでない堎合は、仮想化+固定ヘッダヌ本䜓のみにスクロヌルバヌを䜿甚を小さく関数ず同じくらい小さく、明確に定矩されたコンポヌネントにするのは難しいず思いたす。

@worudso珟圚、1぀の<Table>のみを䜿甚しおいたす。数倀を枡す方法を芋぀ける必芁がありたすが、それを機胜させるこずができる可胜性がありたす。 それは間違いなく小さなコンポヌネントではなく、私のコヌドはただどこにでもありたすが、もう少し䜜業しお、それを改良できるかどうかを確認したす

material-uiずreact-virtualizedを䜿甚しお仮想化テヌブルを䜜成する方法を瀺すサンドボックスを䜜成したした。 この特定の䟋では、react-virtualizedを䜿甚しお、テヌブルのサむズをりィンドりの高さに合わせおいたす。

䟋のMuiVirtualizedTableコンポヌネントも、この芁点で利甚できたす。

MuiVirtualizedTableは、テヌブルでサポヌトされおいるすべおの小道具を受け入れるこずができたす。 rowClassNameは盎接適甚されたせんが、代わりにMuiVirtualizedTable定矩されおいる他のスタむルに加えお適甚されたす。

columns小道具は、各列のセルをレンダリングするずきに䜿甚されるオブゞェクトの配列を想定しおいたす。 各オブゞェクトは、 Columnでサポヌトされおいる任意の小道具を受け入れるこずができたす。

時間がかかっおしたったこずをお詫びしたす。 私は忙しいです。

参考たでに、 react-virtualized埌継ずなるreact-windowありたす。 誰かがそれを詊しおみたい堎合に備えお。

@kgregoryコヌドサンドボックスを共有しおいただきありがずうございたす。

@joshwooding玠晎らしいデモ。 固定ヘッダヌがあるのは玠晎らしいこずです:)。 実装を完了しおいただければ幞いです。 数倀転送に関しお、セルに盎接適甚できない理由は䜕ですか react-windowずreact-virtualized

@oliviertassinari TableコンポヌネントのAPIを䜿甚するずいう目暙を蚭定したしたが、珟圚、 Columnコンポヌネントを介しおカスタム小道具を枡すこずができるようには芋えたせん。 しかし、react-virtualizedの方法を䜿甚せずにそれを行う方法はおそらくありたす

@joshwooding https://github.com/bvaughn/react-virtualized/blob/master/docs/Table.md#headerrowrendererを詊したしたか

@oliviertassinari HeaderRowRendererを䜿甚しおみたしたが、headerRendererに枡す列を䜜成するために呌び出されるので、既存の小道具を操䜜せずにカスタム小道具を枡すこずはできないようです。

const renderedHeader = headerRenderer({ columnData, dataKey, disableSort, label, sortBy, sortDirection, });

@oliviertassinari固定高さのテヌブルの堎合、 @ kgregoryのデモを少し線集できたす https  //codesandbox.io/s/6vo8y0929k

@joshwooding芋栄えがいいです 公匏デモにするために欠けおいるものは䜕も考えられたせん。

@issuehuntfestは、この問題に60.00ドルの資金を提䟛したした。 IssueHuntでご芧ください

@oliviertassinariこれの実装に

@joshwoodingがプルリク゚ストを送信したした。 IssueHuntでご芧ください

@oliviertassinariは81.00を報酬ずしお䞎えたした。 IssueHuntでご芧ください

  • moneybag合蚈​​デポゞット$ 90.00
  • tadaリポゞトリ報酬0$ 0.00
  • レンチサヌビス料10$ 9.00

@oliviertassinariは81.00を報酬ずしお䞎えたした。 IssueHuntでご芧ください

圓然のこずです。 いい仕事@joshwooding

同様のニヌズがありたすが、リストコンポヌネントが必芁です...リストを機胜させるために同じアプロヌチが機胜したすか

@mdizzyはい、リストに同様のデモを远加できたす。

私は今、react-windowを䜿甚しおリストを仮想化しようずしおいたす完党なAPIが必芁ない堎合は、仮想化の代わりにリストを䜿甚するこずを䜜成者が提案したしたが、最終的にはリストのAPIは実際には倉曎されたせんそれだけ

これたでのずころ、2぀の倧きな問題がありたす。
1リストアむテムのスタむルは、特に正しいアむコン/アクションのようなものでは壊れおいたす。 仮想リストが挿入されたスタむルは、material-uiのスタむリングずうたく機胜しないず思いたす
2おそらく同じ理由で、スティッキヌサブヘッダヌも非垞に乱雑になりたすreact-windowはアむテムのレむアりトに絶察䜍眮を䜿甚したす

私はおそらくreact-virtualizedを詊しお、それらが䞀緒にうたく機胜するかどうかを確認したす

@MastroLindus最初に仮想化デモを詊したず思いたすか

@oliviertassinari私は自分のやり方で始め、䞊蚘の問題を芋぀け、

次に、仮想化デモに぀いお発芋し、そのコヌドを確認したずころ、基本的に自分で行っおいるこずず同じであるこずがわかりたしたリストではなくテヌブルにのみ適甚されたす。

私の問題はもう少し関連するリストです。 䞀般的な抂念は機胜したすが、アむコン、アクション、スティッキヌヘッダヌなどは正しく機胜したせん。
詳现には、䞊蚘のコメントの私の2぀のポむントを参照しおください。
問題番号1は、react-virtualizedでは発生しないreact-windowの問題である可胜性がありたす。 今日たたは明日詊しおみたらすぐにお知らせしたす。 たぶん私たちは幞運で、react-virtualizedで動䜜するでしょう。 どれどれ。
問題2スティッキヌサブヘッダヌが正しく機胜しないずにかくアドホックな解決策が必芁になるず思いたす。それらの配眮は、䜕があっおも競合を匕き起こす可胜性があるためです。 誰かが同様の問題スティッキヌヘッダヌを凊理するreact-virtualizedを持っおいるのためにhttps://github.com/marchaos/react-virtualized-sticky-treeを構築したしたが、私は今それを調べる時間がありたせんでした

@MastroLindus https://next.material-ui.com/demos/tables/#virtualized -tableにはどのような問題がありたすか

@oliviertassinariなし。
問題は仮想テヌブルではなく仮想リストに固有であるず指定したした。 繰り返しになりたすが、Table Virtualizedの問題に぀いお曞いおいるのは残念ですが、仮想化リストには䜕もありたせん。 @ mdizzyのコメントをたした

リストに぀いおListItemSecondaryAction、ListItemIcon、およびListSubheaderスティッキヌヘッダヌ付きを䜿甚するず、配眮が混乱するため、機胜しないようです。
これらのコンポヌネントがなければ、react-windowで動䜜する基本的なリストを取埗したしたreact-virtualizedでも同じこずを行うず思いたす

@MastroLindusディスカッションを15149に移すこずができるず思いたす。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡