React-window: AutoSizer

䜜成日 2018幎05月30日  Â·  41コメント  Â·  ゜ヌス: bvaughn/react-window

react-measureで構築されたAutoSizer゜リュヌションを文曞化したす Resize Observer仕様に基づいお、ポリフィルするこずができたす。 これは、サむズ倉曎を怜出するためのより将来に適した方法のようです。

今のずころ、私は、スタンドアロン版の公開しおいるAutoSizerからコンポヌネントを反応させ、仮想化、などの反応-仮想化-オヌトサむザヌを。

最も参考になるコメント

react-measureフックバヌゞョンをリリヌスする予定です。これは、コンポヌネントの自動サむズ蚭定に少し適しおいたす。

党おのコメント41件

これをただコヌディングしおいない堎合。 私はそれを拟うでしょう。 私はreact-measureを詊しおみる぀もりでした。

良い Travis@souporseriousに連絡しおください。 圌ず私はこれに぀いお少し話しおいたした。

私の最近の考えは、react-windowはAutoSizerコンポヌネントを必芁ずしないずいうこずです。 代わりに、この目的でreact-measureを䜿甚する方法を文曞化するこずができたす。 軜量のラッパヌコンポヌネントをリリヌスするこずもできるかもしれたせんが、メむンラむブラリに含めるべきではないず思いたす。少なくずもただ考えおいたせん。

分かりたした。 したしょう。 react-measureにもう少し慣れたら、圌にメヌルを送信したす。

芪ノヌドを枬​​定する方法や、 measureRefを芪ノヌドに枡す方法に興味がありたす。

私は同じこずに興味がありたした これが圌がそれに぀いお蚀ったこずです

ああ、私はあなたが今䜕を意味するのかわかるず思いたす。 ええ、来週レポを曎新させおください。新しいAPIがこれをどのように可胜にするかをお芋せしたす。 枬定倀の凊理方法をカスタマむズできるすべおのmeasureRefに「匏」オプションを提䟛したす。そのため、AutoSizersの堎合、芪の枬定倀を調べお倉曎時に報告するカスタム匏を䜿甚できたす。 埮調敎が必​​芁かもしれたせんが、うたくいくはずです。

これに぀いおTravisず協力するずいうアむデアが倧奜きです。なぜなら、1これはりィンドり凊理の問題ではないので、このラむブラリで所有する必芁がないのは良いこずです。2圌のアプロヌチはCellMeasurerよりも未来的なもののようです

それは本圓に有望に聞こえたす

芪ノヌドでmeasureRefを呌び出すだけのラッパヌコンポヌネントをテストしたす。 それでうたくいくのだろうか。

サンドボックスを投皿したす

ああ、私のアポストロフィの䜿甚法🀊‍♂💩

@wuweiweiwuあなたが興味を持っおいるず聞いおうれしいです ただいく぀かの新しいコヌドでリラむトPRを曎新する必芁がありたす。 明日の倜は少し時間がありたすが、それを成し遂げるこずができるはずです。 ご䞍明な点がございたしたら、どちらかからのフィヌドバックをお埅ちしおおりたす。曎新され次第、すぐにご連絡いたしたすので、良い解決策にたどり着くこずができれば幞いです🀞。

@souporserious玠晎らしい 楜しみにしおいたす。 私はただボンネットの䞋でreact-measureにもっず粟通する必芁がありたす:)

@bvaughn私はいく぀かのハッキヌなコヌドずMeasure https//codesandbox.io/s/xll21o5lo4のラッパヌで機胜する抂念実蚌を䜜成しformulaオプションを奜むでしょう

@wuweiweiwuいい仕事!!! それは私が考えおいたものず䌌おいたす。 ちょっずしたメモですが、 rcタグの䞋にむンストヌルできる新しいAPIが䜜品にありたす。これは、叀いAPIずは少し異なりたす。 パッケヌゞを远加するずきに、codesandboxのドロップダりンでアクセスできたす。 parentNodeを぀かんで、それをmeasureRef枡すずいうアむデアが奜きです。 たぶん、 react-measureを埮調敎しお、䜜業を簡単にするこずができたす🀔。

ここにも簡単なサンドボックスをたずめたした https 

ただし、これは2぀のノヌドをラップしおいるため、最も優れたAPIではありたせん。 formulaオプションで私が予枬しおいる1぀の問題は、倉曎に぀いお芪のノヌドを監芖しないこずです。これは、芪のディメンションを取埗するためにのみ䜿甚できたす...したがっお、これが機胜する他の方法は次のずおりです。 APIを枡すこずによっお。 このようなこずに぀いお、あなたずあなたの䞡方がどのように感じおいるのか疑問に思いたす👇

<AutoSizer>
  {({ bindParent, bindChild, width, height }) => (
    <div {...bindParent}>
      <div {...bindChild}>
        {width} x {height}
      </div>
    </div>
  )}
</AutoSizer>

それは私のお気に入りではありたせんが😏だから、 parentNodeを぀かんで、それをmeasureRef枡すこずで、 react-measure埮調敎するのが最善かもしれたせん。

この䟋^がmeasureRefを枡すこずずどのように違うのかわかりたせんか どちらの堎合も、 AutoSizerは_parent_ではなく_child_を枬定しおいたす。 したがっお、远加のパラメヌタを通過するこずを心配する必芁がありたす。

私にずっお䞍幞に思われる理由は次のずおりです。

  • 子関数でより倚くのパラメヌタヌを凊理する必芁がありたす。
  • AutoSizerは、たずえばflex: 1 1 autoなどのスタむルをトップレベルのラッパヌに蚭定する必芁があるため、再利甚性が䜎くなりたす。 これをフレックスコンテナの倖で䜿甚したい堎合はどうなりたすか
  • これは、内郚のegリストぞの参照を取埗するプロセスを耇雑にしたす。 新しいforwardRef APIを䜿甚する必芁がありたすが、16.3以䞊に制限されたす。

ええ、それは私が考えおいたものず䌌おいたす。 私はparentNodeアプロヌチに固執するず思いたす。 AutoSizerような堎合、 react-measureでそれを行うためのより簡単な呜什型の方法を远加できるかもしれたせん。 今倜、いく぀かのこずをいじっお、あなたに戻りたす。

@souporseriousすごい 私も最新の状態に保っおください:)

@vx/responsiveにはParentSizeコンポヌネントがあり、これはResizeオブザヌバヌ仕様の軜量ラッパヌでもありたすが、 react-measureの曞き盎しを怜蚎しおおり、 @ hshoffずの採甚に぀いお怜蚎しおいたす。 たた、ツヌルチップなどのバりンディングボックスでうたく機胜するこずを確認する必芁がありたす。

私はreact-virtualizedのAutoSizerず@vx/respnosiveのParentSize䞡方をmui-tableコンポヌネントで䜿甚し、成功を収めおいたす。 私は珟圚、いく぀かの非オヌプン゜ヌスコヌドでParentSizeを䜿甚しおいたすが、Flexboxのスタむル蚭定ずサむズ倉曎に問題がありたした通垞は倧きい方が機胜したす。

ねえ@techniqはあなたがreact-measure怜蚎しおいるず聞いお倧奜きです 申し蚳ありたせんが、私は曞き盎しを怠っおいたす。 私は私の䞻な仕事でずおも忙しかったです、私はそれを抌し続けおいたす😞。 でも、たずめるこずが私の次の優先事項です。 私たちはツヌルチップやポップオヌバヌのために仕事をしおいる私のチヌムのUIキットでそれを䜿甚しおいるので、うたくいけばあなたのニヌズにうたく翻蚳されるはずです。

むンスピレヌションを埗るために、過去にParentSizeコンポヌネントを芋おきたした。 興味があれば、新しいreact-measureバヌゞョンが出たら、PRしお枬定郚分に䜿うこずができたす。

@souporserious PRは、時間があれば玠晎らしいでしょう。

HOCの代わりにレンダヌプロップを䜿甚するために、より倚くのコンポヌネントを移怍するこずに関しお、半関連の問題がありたす。 ParentSizeはしばらく前に移怍されたしたHOCはただ利甚可胜ですが、問題にリストされおいるものは関連しおいたす ScreenSize =芪ずしおのりィンドり/ビュヌポヌト、バりンディングボックスの凊理、すべおチャヌトのサむズずツヌルチップに関連しおいたす。

あなたの請求曞支払いの仕事を最初に眮くこずを完党に理解しおください、私は同じ船に乗っおいたす😉私がオヌプン゜ヌスのためのより倚くの時間を持っおいればいいのですが、珟圚の仕事はタスクを達成するためにそれを䜿甚する以倖にそれに取り組むこずを盎接サポヌトしおいたせん。

今のずころ、私は、スタンドアロン版の公開しおいるAutoSizerからコンポヌネントを反応させ、仮想化、などの反応-仮想化-オヌトサむザヌを。

AutosizerずVariableSizeListに問題があるず思いたす。
スクロヌルを怜出するためのHOCコンポヌネントを䜜成したしたが、オヌトサむザヌを䜿甚するず、スクロヌルむベントハンドラヌがトリガヌされたせん。 なにか提案を 

const Example = () => (
<div className={parentAutosizer}>
  <AutoSizer>
      {({height, width}) => (
    <List
        height={150}
        itemCount={1000}
        itemSize={getItemSize}
        width={300}
     >
       {Row}
      </List>
      )}
    </AutoSizer>
  </div>
);

export const WindowScroll(Example)

そしおスタむルはそれらです

parentAutosizer: {
    position: 'absolute',
    top: 0
    bottom: 0
    left: '0',
    right: '0'
  }

@MatteoGioioso問題はWindowScrollHOCの䞭に隠されおいるず思いたす。 問題のあるcodesandboxがなければ、私たちは良い助けを提䟛するこずはできたせん。

@TrySound

私はそうは思わない。 オヌトサむザヌを䜿甚せずに高さず幅を手動で蚭定するず、WindowScrollは正垞に機胜したす。
ずにかく、私はそれをコヌドサンドボックスで明日耇補しようずしたす。
ありがずう

ねえ@ MatteoGioioso👋

AutoSizer問題が発生しおいるずのこずで、ご䞍䟿をおかけしおおりたす。 別の問題を提出するこずをお勧めしたすこの問題はドキュメントに関するものであるため_しかし_完党な再珟ケヌス WindowScroll HOCを含むを提䟛しない限り、問題を䜜成しないでください。芋えないコヌドで䜕がうたくいかないのかを掚枬したす。

@bvaughnわかりたした、やりたす=

私はantDのヘビヌナヌザヌでは長い間仮想化を

私は圌らを助けたいのですが、私が着手する前に、オヌトサむザヌで反応りィンドりを䜿甚するためのあなたの珟圚の掚奚事項は䜕であるか疑問に思っおいたした、あなたがメディアの反応りィンドりで䜿甚するために擁護しおいるのは反応仮想化自動サむザヌです長期的には

はい、暙準のResizeObservableベヌスのコンポヌネントが存圚するたで/存圚しない限り、私はreact-virtualized-auto-sizer自分で䜿甚しおいたす。

 sooporserious / react-measureは泚意をわかりたせん。

react-measureフックバヌゞョンをリリヌスする予定です。これは、コンポヌネントの自動サむズ蚭定に少し適しおいたす。

私は珟圚、Reactの珟圚のアルファ版でこのようなものを利甚しおいたす。
コンポヌネント階局に䟝存するのではなく、远跡したい芁玠サむズを開発者が自由に䜿えるようにするため、refアプロヌチが奜きです。

import { useState, useEffect, Ref } from 'react';
import ResizeObserver from 'resize-observer-polyfill';

const useAutoresize = (elementRef: Ref) => {
  const [{ width, height }, setMeasurements] = useState({ width: 0, height: 0 });
  const observer = new ResizeObserver(([{ contentRect }]) => {
    setMeasurements({ width: contentRect.width, height: contentRect.height });
  });
  useEffect(
    () => {
      observer.observe(elementRef.current);
      return () => observer.disconnect();
    },
    [elementRef]
  );
  return { width, height };
};

export default useAutoresize;

私はおそらくreact-windowにAutoSizerを実装しようずしおいたすが、他の誰かがそれに取り組みたいず思ったら、私は䜕も玄束するこずはできたせん

react-virtualized-auto- sizer 、 ずは異なる方法で䜕をする予定ですか

私は数幎前にReact甚の非垞に軜量な枬定ラむブラリ䟝存関係のない400バむトをリリヌスしたした。これは非垞にうたく機胜したす x 。

これを䜿甚しおAutoSizerコンポヌネントを䜜成したいので、 react-windowず䞀緒に出荷するのが理にかなっおいるず思いたす䞻に、最終的なgzip圧瞮されたバンドルサむズに1kbを超えお远加されないためですがは仮想リストナヌザヌの99にずっお必須の機胜ですが、スタンドアロンラむブラリずしお優れおいるず思われる堎合は、その方法も䜿甚したす。

具䜓的には、各セルコンポヌネントにupdateCellSize関数を提䟛しお、サむズの曎新を簡単にしたいです。 これは、仮想リストコンポヌネントの内郚で䜿甚するアプロヌチであり、開発者にずっお非垞に䜿いやすいこずが蚌明されおいたす。

それが理にかなっおいる堎合は私に知らせおください。

基本のreact-windowラむブラリ自動サむザヌなどを含むに、特にりィンドり凊理に関するもの以倖のものを远加したくないず思いたす。 アドオンパッケヌゞにすべきだず思いたす。

updateCellSizeをどのように䜿甚しおいるか、たたこのようなラむブラリでどのように䜿甚されおいるかに぀いお詳しく知りたいず思いたす。

updateCellSizeをどのように䜿甚しおいるか、およびこのようなラむブラリでどのように䜿甚されおいるかに぀いお詳しく知りたいず思いたす。

これは、内郚で䜿甚するAPIのように芋えたす。

import { FixedSizeList as List } from 'react-window';

const Row = ({ index, style, updateCellSize }) => {
  const [isOpen, setOpen] = useState(false);

  return (
    <div style={style} tabIndex={0} onClick={() => {
      setOpen(isOpen => !isOpen);
      updateCellSize();
    }}>
      Row {index}
      {isOpen && 'Lorem lipsum dolor sit amet, the quick brown fox jumps over the lazy dog, woff.}
    </div>;
  }
}

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

それは完党な䟋ではないず思いたす。 updateCellSizeずは䜕ですか それが呌び出されたずきにそれは䜕をしたすか 行が固定サむズ35pxの堎合、そもそもなぜそれが必芁なのですか

@bvaughn isOpen状態は、 divのサむズを拡匵する可胜性がありたすええ、䟋はそれほど明確ではなかったかもしれたせん。

updateCellSizeは、 cache.clear(index, 0)  indexはセルむンデックスずforceUpdateGrid 実際に必芁かどうかわからない堎合でもを実行するだけです。

isOpen状態は、 divのサむズを拡匵する可胜性がありたす

FixedSizeListはこれをサポヌトしたせん。 すべおの行は固定サむズです–䞊蚘の䟋では、35ピクセルです。 たぶんあなたはVariableSizeListを䜿っおいたすか

@bvaughnええ、今はreact-virtualizedを䜿甚しおいたす。 切り替えられるようにここで貢献したかったのです。 しかし、私は頭の䞭でいく぀かの混乱があるず思いたす😄

分かりたした。 ええ、 VariableSizeListはreact-virtualizedのように機胜したす。 それはあなたのために働くはずです。

ずりあえず、READMEを曎新しお、 react-virtualized-auto-sizerを䜿甚した゜リュヌションを文曞化したした。 その解決策は十分に良いので、私は今のずころこの問題を閉じる぀もりです。 それでも、 ResizeObserver基づいたアプロヌチを調べお、話し合うこずができおうれしいです。

react-window可倉サむズグリッドで䜿甚するず自動サむザヌに問題がありたす。可倉サむズグリッドでは正しく機胜したせん。 可倉サむズグリッドのオヌトサむザヌで䜿甚した゜リュヌションたたは䟋をいく぀か提䟛しおください。

前もっお感謝したす

@ sgupta317react -virtualized-auto-

<AutoSizer />は、その芪芁玠の高さを継承したす。

解決策 heightが100vH蚭定され、 positionがabsolute蚭定されおいるdivでラップするだけです。

@bvaughn React-windowリストを䜿甚するず、2぀のスクロヌルバヌが衚瀺されたす。 react-virualizedリストでは、autoheight = trueを䜿甚するこずでこれを回避できたす。 Reactりィンドりで2぀のスクロヌルバヌを回避する方法を教えおください。
これは参考のために私のコヌドスニペットです。

<WindowScroller>
            {({ height }) => (
                <AutoSizer disableHeight>
                    {({width}) => (
                        <List
                            width={width}
                            height={height}
                            itemCount={logFile.length}
                            itemSize={120}
                            overscanCount={10}
                        >
                            {({index,style}) => (
                                <div>
                                    <div style={style} className="post">
                                        <h3>{`${logFile[index].id}:-${logFile[index].first_name}-${logFile[index].last_name}`}</h3>
                                        <p>{logFile[index].timestamp}</p>
                                    </div>
                                </div>)}
                        </List>
                    )}
                </AutoSizer>
            )}
</WindowScroller>

祖先のDOM芁玠の1぀にoverflow: hiddenしたす。 それが原因である可胜性がありたす。

Resize Observerベヌスのオヌトサむザヌを䜿甚しおいるRE。この䟋に基づいた単玔なフックを䜿甚しお、これを機胜させおいたす。 これたでのずころうたく機胜しおいるようです:)

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

関連する問題

maynir picture maynir  Â·  4コメント

vinnymac picture vinnymac  Â·  3コメント

bitboxer picture bitboxer  Â·  3コメント

ivan-badmaev picture ivan-badmaev  Â·  3コメント

Kizmar picture Kizmar  Â·  3コメント