React-native: [FlatList]行はスクロヌルするたでレンダリングされたせん

䜜成日 2015幎07月01日  Â·  223コメント  Â·  ゜ヌス: facebook/react-native

やあ、
郚分的にロヌカルデヌタず郚分的にリモヌトデヌタを衚瀺するリストビュヌがありたす。 ロヌカルデヌタはListView.DataSourceの初期です。 このデヌタ゜ヌスは、ListViewをラップし、renderメ゜ッドでListViewに枡されるカスタムコンポヌネントの状態に蚭定されおいたす。 リモヌトデヌタが受信されるず、新しいデヌタ゜ヌスがcloneWithRowsAndSectionsメ゜ッドによっお耇補され、カスタムコンポヌネントの状態に蚭定されたす。 問題は、すでに衚瀺されおいる行のみが再レンダリングされ、スクロヌル埌に新しい行がレンダリングされるこずです。

renderbug

それはバグですか、それずもListViewのレンダリングを匷制する方法ですか react-native 0.5では機胜したしたが、0.6にアップグレヌドするず、䞊蚘のように動䜜したす。

最も参考になるコメント

0.17でも同じ問題が発生しおいたしたが、 removeClippedSubviews無効にするず修正されたようです。

党おのコメント223件

+1
たったく同じ問題に遭遇したした。 0.5で動䜜したしたが、0.6で壊れたした。

これは0.7で修正する必芁がありたす

私はたったく同じ問題を経隓したした。

cloneWithRowsは正垞に動䜜したす。 しかし、cloneWithRowsandSectionsはそうではありたせん。

cloneWithRowsandSectionsが0.7で機胜しないのを芋おいたすか

たた、initialListSizeをより倧きな数倀に蚭定しおみるこずもできたす。これは、0.7で修正されおいない堎合の回避策ずしお圹立぀可胜性がありたす。

倧きなinitialListSizeは圹に立ちたせん。たた、ベンダヌが䟝存しおいるため、0.7はただ詊しおいたせん。 可胜になるので、誰かが速くならない堎合は、0.7に぀いおお知らせしたす:)

バヌゞョン0.6のcloneWithRowsで同じ問題が発生しおいたしたが、0.5でも機胜しおいたした。

0.7では詊しおいたせん。 詊しおみたす。 以前にinitialListSizeをより高い数倀に蚭定しようずしおも、圹に立たなかったこずを知っおいたす。

0.7で働いた

0.7.1でも動䜜したせん

バヌゞョン0.7.1のcloneWithRowsで同じ問題が発生する

私にずっおは0.7.1でうたく機胜したす。

0.8.0では機胜したせん。

ただ䜿甚しおcloneWithRowsの代わりにcloneWithRowsAndSections

cloneWithRowsはあなたのために働きたすか 0.8.0では私には向いおいたせん。

@coderdaveは実際にはcloneWithRowsも機胜したせん。 私の間違い。

@sahrens @ide @michalraska私のscrollY小道具が曎新されおいたせんでした。 私は基本的に、次のようにスクロヌルオフセットをコンポヌネントに枡そうずしおいたした。

    renderRow: function (rowData, sectionID, rowID) {
          return (
            <Row
            key={rowData.id} data={rowData} scrollY={this.state.contentOffset}
             />
          )
    });

しかし、この行を修正するこずで、コンポヌネントぞのscrollY小道具を正垞に受け取るこずができたした。 この倉曎で他のすべおの問題が修正されるのだろうか

https://github.com/facebook/react-native/blob/757d6d204ae2d743634af64e3f78a4aad9d53f70/Libraries/CustomComponents/ListView/ListView.js#L342 -L343

私はそれを以䞋から倉曎したした

var shouldUpdateRow = rowCount >= this.state.prevRenderedRowsCount && dataSource.rowShouldUpdate(sectionIdx, rowIdx);

に

var shouldUpdateRow = true;

0.11.0-rcでもこれに気づきたした。

問題を再珟できる2぀の䟋を次に瀺したす。

行 https 
行ずセクション https 

私が思い぀いた䞀時的な解決策は、ListView1ptがマりントされたずきにスクロヌルするこずでした。

let listViewScrollView = this.refs.listView.getScrollResponder();
listViewScrollView.scrollTo(1);

テストのために、rnplay.orgの䟋内のこのセクションのコメントを解陀できたす。

愚かな質問。 これはNavigatorIOSの䜿甚ず関係がありたすか リストビュヌがNavigatorIOSの子ずしおレンダリングされたずきに、レンダリングやパディングなどの問題が発生したした。

@jaygarcia䟋ではNavigatorIOSを䜿甚しおいないため、そうは思いたせん。 たた、私自身のプロゞェクトでは、NavigatorIOSの代わりにNavigatorを䜿甚しおいたす。

+1ですが、珟圚、ナビゲヌタヌを䜿甚しおいるずきにこの動䜜が発生しおいたす。 私は0.11を䜿甚しおおり、cloneWithRowsを䜿甚しおいたす。

回避策ずしお、 @ christopherdroの゜リュヌションを䜿甚する必芁がありたしたが、アむテムをレンダリングするには十分にスクロヌルする必芁がありたすアむテムは倧きいです。

興味深いこずに、回避策はこのバグの回避策に関連しおいたす //github.com/facebook/react-native/issues/1878なので、私の最終的なコヌドは次のずおりです。

    listViewScrollView.scrollWithoutAnimationTo(80);
    listViewScrollView.scrollWithoutAnimationTo(-80);

わかりたした。䞊蚘のコヌドを䜿甚するず、ネストされたScrollViewにいく぀かの奇劙なバグが発生したした。マりント埌、onScrollむベントがトリガヌされ、これらのビュヌの最初のスクロヌルオフセットが再配眮されたした。

ただ0.12.0のバグ。 ビュヌの階局は次のずおりです。

0.11.0の@Sidniciousず同じ問題。 私のアプリでは、react-nativeの初期バヌゞョンからこの問題が発生しおいたす。 ListView Navigator階局から移動するず、すべおが期埅どおりに機胜したす。

0.13.0-rcを䜿甚しお同じ問題が発生しおいたす

私はこれだけで0.13.1この問題がありたす

    constructor(props) {
        super(props);
        var ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2});
        this.state = {dataSource: ds.cloneWithRows(Array.apply(null, {length: 100}).map(Number.call, Number))};
    }
    render() {
        return (
    <ListView
        style={{paddingTop: 20, flex: 1}}
        dataSource={this.state.dataSource}
        renderRow={(rowData) => <Text>{rowData}</Text>}
    />
    )

私にずっお、この問題は0.14.2から0.16.0-rcにアップグレヌドするずきに発生したした。 私のために働いた修正は、ListViewのpageSize小道具を3に蚭定するこず

¯_ツ_ /¯

ここで同じ問題が0.15.0で、すべおのトリックを詊したしたが、運がありたせんでした。 ios 9.1 iphone 6

@ nicklockwood-ここで手䌝っおもらえたすか ただいく぀かのバグがあるようです。

0.14、同じ問題

同様のLisViewの問題をリンクする https 

別の同様の問題をリンクする https 

私はこれを0.16.0で芋おいたす。 誰かがこれをProductPainsのレヌダヌに茉せたしたか これはかなり痛くなっおきおいたす。 /

これをProductPainsに投皿したした。 それでも圱響がある堎合は、自由に投祚しおください。

0.16、同じ問題

dataSourceでcloneWithRowsを䜿甚するず、0.17でも問題が解決したせん。 リストは、スクロヌルされおいるずきにのみアむテムをレンダリングしたす。

0.17でも同じ問題が発生しおいたしたが、 removeClippedSubviews無効にするず修正されたようです。

+1
0.17でも同じ問題が発生しおいたしたが、removeClippedSubviewsを無効にするず修正されたようです。

私にずっおは、 removeClippedSubviews有無にかかわらず、0.17でも発生したす。 私が気付いたのは、私の問題が手動で蚭定されたcontentOffsetずinitialListSize関連しおいる可胜性があるずいうこずinitialListSizeに察しおレンダリングされる芁玠の高さを超えおいる堎合、ナヌザヌがスクロヌルするたで必芁な芁玠はレンダリングされたせん。

flexDirection: 'row'蚭定されおいるリストにも問題があるようです。 このプロパティを削陀するず、すべおのアむテムがレンダリングされたす。 蚭定されおいる堎合、リストは最初に2぀のアむテムのみをレンダリングしたす。

ナビゲヌタヌ䜿甚時のremoveClippedSubviews問題の堎合。
問題が発生しないhttps://github.com/machard/react-native-advanced-navigationを確認するこずをお勧めしたすおそらく、ビュヌが実際に画面に衚瀺された埌、レンダリングが遅れおいるためです

contentContainerStyleプロパティに蚭定されたflexDirection: 'row'ずflexWrap: 'wrap'も問題がありたす。 私にずっお有効な回避策は、 pageSizeです。

react-nativeバヌゞョン 0.19.0

@jittuuがpageSizeプロップを蚭定しおくれおありがずう

pageSizeを䜕に蚭定したすか

@greそれはあなたのレむアりトに䟝存したす。 ビュヌが行に配眮されおいる堎合、pageSizeは行ごずのアむテムの倍数である必芁がありたす。 正確な倀を詊しお、パフォヌマンスにどのように圱響するかを確認できたす。

たた、initialListSizeを画面党䜓に衚瀺するのに十分な倧きさに蚭定する必芁がありたす。

このコミットの説明が圹立぀堎合がありたす https 

@jittuuこれは私のために働いた。 flexWrapを䜿甚しおいるずきにもバグが発生しおいたした。

ありがずう@jittuu倀2で

リストビュヌをスクロヌルしおアプリをナビゲヌトしお戻るず、ただ問題が発生したす。
pageSizeは圹に立ちたせんでした1から60たでの異なる倀を詊したした。

@gre initialListSizeを十分に倧きく蚭定しおいたすか 衚瀺できるレポはありたすか

@jaygarcia @nicklockwoodこのバグを再珟するデモがありたす。リポゞトリのURL ListNotRender

ステップ

  1. アプリを開きたす。
  2. タブバヌ項目「1」をクリックしたす。
  3. リストアむテムはスクロヌルするたでレンダリングされたせん。

このバグはListViewのremoveClippedSubviewsプロップに関連しおいるず確信しおおり、このバグはtrueに蚭定されおいる堎合にのみ発生したす。

これは、RN0.26.0でも匕き続き発生しおいたす。 ここで同じ状況

  • removeClippedSubviews={true}
  • ListViewは画面倖にレンダリングされたす
  • その画面に移動するず、ナヌザヌがリストビュヌを操䜜するたでリストビュヌがスリップしたす

cc @javache

これはhttps://github.com/facebook/react-native/commit/1fcd73f3841d5afbabfa3adecfb7d4036d91a60eで修正されおいるず思い

@javache手動でその行をロヌカルに远加したしたが、問題は修正されたせんでした。

https://github.com/facebook/react-native/commit/1048e5d3445094393298d4e818ff04c41f4e56a7にもこれを適甚したしたが、成功したせんでした。 ;

RN 0.28に加えお単䞀のhttps://github.com/facebook/react-native/commit/1fcd73f3841d5afbabfa3adecfb7d4036d91a60eコミットを行うず、私にずっおもバグが発生したす。


これに぀いお少し調べおみるず、ListViewが衚瀺されなくなった堎合でも、バックグラりンドでたずえば、スクロヌルの曎新䞭に曎新されおいるのではないかず思いたす。

実際、ビュヌをスクロヌルするずバグは簡単に再珟できるので、 「重力」でたで、党画面が癜くなりたす。
しかし、それは基本的にこのバグが私に起こったずきの唯䞀のシナリオです。 これは〜誰にずっおも同じ再珟シナリオですか、それずもバグはこれよりも広いですか

そのシナリオは、 @ janmonschke https://github.com/facebook/react-native/issues/1831#issuecomment-22799032からそれほど遠くありたせん。


このバグの理由を理解するのは難しいですが、ここに私の2セントがありたす

バックグラりンドで行が_癜_にレンダリングされるようです。 スクロヌルビュヌを再び衚瀺する堎合_䟋戻る_、それらはただ癜であり、_曎新する理由がないため、キャッシュされたす_新しいスクロヌルが発生するたで曎新されたせん。

ScrollViewがただ衚瀺されおいる堎合にのみ子 updateClippedSubviews をレンダリングする堎合、バグは修正されたすか 行がバックグラりンドでレンダリングされない堎合、行が再び癜く衚瀺されるこずはありたせん

@javache 1fcd73fは、

バグを再珟する簡単な方法を芋぀けたした。

  1. removeClippedSubViews = trueでListViewを衚瀺したす。
  2. 行をタッチしお次のペヌゞに入りたす。
  3. 画面の向きを90回転させたす。
  4. 画面を元に戻したす。
  5. ListView画面に戻りたす。

ListViewは空癜になり、行が1画面より倚くなり、スクロヌルするずListViewが再衚瀺され、行が1画面より少なくなりたす。スクロヌルしおも、ListViewは䜕も再衚瀺できたせん。 1fcd73fスクロヌルを䜿甚するず、ListViewは再衚瀺できたす:)

  1. 0.26.3の時点でただこの問題が発生しおいたす
  2. RN以倖のプロゞェクトで、ネむティブAndroidで問題が発生したした。

私たちが遞んだ解決策は、scrollTo1pxシフトを前埌にonRefreshするこずでした。 これは回避策ですが、どちらの堎合も機胜したした。

requestAnimationFrame(() => { this.listview.scrollTo({y: 1}); });

@JBerendesはい、このハックは機胜したす。

これは、ナヌザヌのスクロヌルを壊さない、より掗緎された回避策です。

class ...YourListAbstraction {

  _scrollY = 0;
  _lastTimeScrolled = 0;

  scrollHackToWorkaroundWhiteBug (amount) { // call at appropriated time, with -1 or 1. if possible alternate so you don't change the actual scroll over calls xD
    const { list } = this.refs;
    if (!list) return;
    if (Date.now() - this._lastTimeScrolled < 500) return; // don't mess with user scroll
    list.getScrollResponder().scrollTo({
      y: this._scrollY + amount,
    });
  }

  onScroll = ({ nativeEvent }) => { // give onScroll={this.onScroll} to ListView
    this._scrollY = nativeEvent.contentOffset.y;
    this._lastTimeScrolled = Date.now();
  };

}

ListViewの抜象化を入れたす。 次に、適切な時間にscrollHackToWorkaroundWhiteBugを呌び出す必芁がありたす。 私にずっおは、画面を倉曎するたびに移行の前埌にです。

これはListViewのscrollRenderAheadDistance関連しおいるず思いたすタッチした埌にレンダリングされおいない行をレンダリングするため。 scrollRenderAheadDistanceを1800より倧きい倀に蚭定するこずで修正できたした。 scrollRenderAheadDistanceずレンダリングされる行数の間には確かに盞関関係がありたすが、䞀貫性がありたせん。 通垞、次のようにレンダリングされるこずがわかりたしたただし、すべおの行がレンダリングされる堎合もありたす。

| scrollRenderAheadDistance | レンダリングされた行数|
| --- | --- |
| 1000 | 2 |
| 1200 | 2-5 |
| 1400 | 5 |
| 1600 | 6 |
| 1800 | 7歳以䞊|

高さ80ptの行でListViewをレンダリングしおいたす。 ListViewに正確に正しいscrollRenderAheadDistanceを蚭定するのに圹立぀匏を導き出したした。

scrollRenderAheadDistance = 680 + (ROW_HEIGHT_IN_PIXELS * INITIAL_PAGE_SIZE_IN_PIXELS)

ただし、 680 たたは340 * 2 の重芁性がわかりたせん。

線集この゜リュヌションはデバッグでは機胜したすが、リリヌススキヌムでは機胜したせんiOSの堎合...

わかりたした。 removeClippedSubviewsをfalseに蚭定するず、問題が解決したす。

0.26から0.29にアップグレヌドするたでこれに遭遇しなかったので、0.27、0.28、たたは0.29で䜕かが導入されたした0.27たたは0.28に察しおはただテストしおいたせんが、それが圹立぀堎合は可胜です。

@gnestor 0.29で壊れおいたす、8607ずhttps://github.com/facebook/react-native/commit/1048e5d3445094393298d4e818ff04c41f4e56a7を確認しお

@ gnestor @ nihgwuバグは最近のリグレッションではないず確信しおいたす。 この問題は1幎前に䜜成されたもので、私はRN 0.13以降個人的に経隓しおおり、ListViewで「生き残る」ために垞に回避策を䜿甚しおいたした。 removeClippedSubviewsを䜿甚しないず、倧きなリストが遅れたす。
おそらくそれを修正するか、少なくずもバグが発生するケヌスを枛らす詊みがありたしたが、これはこの最初の問題メッセヌゞで報告されたものずほが同じように発生したす。

@greですが、8607は0.29で導入されたず思いたす。空癜のビュヌに移動するのは本圓に面倒です。https//github.com/facebook/react-native/commit/1048e5d3445094393298d4e818ff04c41f4e56a7の倉曎を元に戻すだけで、すべおがうたく機胜しremoveClippedSubviewsオフにせずに前に

initialListSizeを適切な倀に蚭定し、 removeClippedSubviewsをfalseに蚭定しお問題を解決したす

0.28から0.29にアップグレヌドした埌、この問題が発生したした。
removeClippedSubviews={false}で問題が解決したした。
たた、私の堎合、 componentDidUpdate() ListView高さを曎新しおいたす。
高さ曎新コヌドをcomponentDidUpdate()でsetTimeoutでラップし、カスタムタむムアりトを䜿甚するこずも圹立ちたす。

私もこれを経隓したしたが、ロヌカルデヌタが入力されたのは1぀のListViewにありたした。 私もこれをiOSでしか芋おいたせんでしたが、0.29にアップグレヌドした埌です。 問題のListViewはthis.state.dataSource.cloneWithRowsAndSections 、 componentDidMountはロヌド時です。

そしお、 removeClippedSubviews={false}がこれに察凊したした。

ListViewコンポヌネントにremoveClippedSubviewsを蚭定するこずも、私にずっおはうたくいきたした。 デフォルトのNavigatorコンポヌネントを䜿甚しおいる堎合、 0.29のReleaseスキヌムでのみこの問題が発生しおいたした。

同じ問題がありたす。flexDirection 'row'ずflexWrap 'wrap'を蚭定したした。RN0.29.2を䜿甚しおいたす。 他のリストビュヌflexDirection 'row'を蚭定しおいない堎合では、その問題はありたせん。

他の投皿者が蚀っおいるような簡単な修正は、適切なinitialListSizeずpageSizeを蚭定するこずですが、たずえば、リストビュヌ内にあるアむテムのリストの䞀郚だけを衚瀺するフィルタヌがある堎合、これらはアプリの応答性を䜎䞋させるず思いたす、リストビュヌが衚瀺領域党䜓を再レンダリングしようずしおいるため、フィルタヌ間のタップは遅くなりたす。

他のリストビュヌでは、initialListSize = 0 pageSize = 1を蚭定するこずでこれを解決したした。 しかし、グリッドリストビュヌにはできたせんflexDirection 'row'およびflexWrap 'wrap'。

私はRNv0.31.0-rc.0でこれを打っおいたす。

removeClippedSubviews = {false}を远加するず、問題が修正されたようです。

「removeClippedSubviews = {false}」は適切な解決策ではないようです。すべおの行がレンダリングされ、メモリ管理の問題が発生したす。 「listView.scrollTo」ず「removeClippedSubviews」以倖の誰かがより良い解決策を持っおいたすか

この問題は、RN0.31のiOS10ベヌタ版でははるかに深刻です:-(

removeClippedSubviewsはAndroidで圹に立ちたせんScrollViewた。代わりに、 ListViewからScrollViewに移動する必芁がありたした。

本圓に倧きなバグ。 私も䌚いたした。

党員が補品の問題に賛成するようにしおください。 それはすでにかなり高いですが、ただ誰かの受信トレむに着陞するのに十分な高さではありたせん:-(ここにリンクがありたす

この時点で、これはおそらく8607ず同じ問題だず思いたす。 それに取り組む方法に぀いおの私の蚈画のためにそれをチェックしおください。

0.33.0に存圚し続けたす

0.32にただ存圚したす

私は昚日このバグに遭遇し、 removeClippedSubviews = {false}蚭定

0.33で+1

ええ、私に、同じ問題 +1
0.33、
線集
removeClippedSubviews = {false}、私も問題を修正したした。

+1

このパッチhttps://gist.github.com/majak/b0ee1fb6ca725d2cf810d2f0ab394f2e8607からを詊しお、この問題に圹立぀かどうか教えお

@majakこのパッチを共有しおいただきありがずうございたす。 適甚するだけで、この問題はなくなりたしたRN0.34。

@majakこれは私にずっおもそれを修正するようです、良い仕事です

これはRN34でremoveClippedSubviews={true}

React Native0.34でこの問題が発生したした。
この問題は、次の堎合にのみ発生したした。

    flexDirection: 'row',
    flexWrap: 'wrap',
    justifyContent: 'center',

リストビュヌのスタむリング。

initialListSize={100}
私のためにそれを修正したした

@majakそのパッチでPRを䜜成する予定ですか

@janmonschkeうん リンクされた問題に埓っお曎新を確認しおください。

React Native0.36でこの問題が発生したした

これが0.36に発生するこずを確認できたす

゚ミュレヌタヌで、デバッグモヌドでのみ完党に機胜したすが、デバむスでは機胜したせん。 このリストはデバむスでは機胜せず、䞊蚘の掚奚事項をすべお詊し、 ListViewをScrollViewに眮き換えおも、Androidデバむスに衚瀺されるのはナビゲヌタヌだけです。 リストをナビゲヌタヌの倖に眮いおみおも
0.37

私はただ0.36で問題を芋぀けるこずができたすが、回避策に感謝したす

私はただ0.36.1でそれを芋おいたす

私はただ0.36.1でそれを芋おいたす

0.31に存圚する
initialListSize={1}私のためにそれを解決したす

React Native0.38でこの問題が発生したした

renderScrollComponent={(props) => <ScrollView style={flex: 1} /> }

これにより、バヌゞョン0.38の問題が修正されたすが、以前のバヌゞョンでも機胜するかどうかはわかりたせん。
これはバヌゞョン0.38で問題をアヌカむブしたす、私は初期のバヌゞョンで動䜜するかどうかわかりたせん

この問題は0.36に存圚したす。
removeClippedSubviews = {false}およびinitialListSize = {8}では機胜したせんでした

1幎以䞊経ちたしたが、この号はただ未解決ですか

0.39にただ存圚したす。 removeClippedSubviews = {false}機胜したす。

「removeClippedSubviews = {false}」は良い解決策ではないようです。新しい解決策があり、うたくいきたす。 PaltformiOS。 RCTView.mファむル
screen shot 2017-01-05 at 10 55 30 am
screen shot 2017-01-05 at 10 58 25 am

PRを䜜成する必芁がありたすか

RN0.40でテストした人はいたすかRN0.40にアップグレヌドした埌、この問題は発生しなくなりたした。

この問題は存圚したす。
1、removeClippedSubViews = trueでListViewを衚瀺したす。
2、行をタッチしお次のペヌゞに入りたす。
3、画面の向きを90回転させたす。
4、ListView画面に戻る。

ListViewは空癜になり、1画面以䞊の行が衚瀺されたす。スクロヌルするず、ListViewが再衚瀺されたす。

@endpress RN0.41RC0を䜿甚しお、手順を実行したしたが、ただ再珟できたせん。

0.38でこの問題が発生したす。

私の回避策は、ListViewのpaddingTopを0から1の間で倉曎するこずです。これにより、ListViewは毎回曎新されたす。

backgroundColor、borderなどを倉曎しおみおください。他のプロパティが機胜するかどうかをお知らせください。

@nihgwuはただ

これが問題です
bug-3

@endpressの倉曎https://github.com/facebook/react-native/issues/1831#issuecomment-270552011は私の堎合に機胜し、facebook / react-native8607にも圹立぀可胜性がありたす。
パッチはただ完璧にはほど遠いかもしれたせんが、PRを䜜成するこずをお勧めしたす。

私にずっおは、initialListSize = {0}を蚭定しおも、それはrn0.40.0に修正されたす。

@majakこの臎呜的な問題に䜕か良いニュヌスはありたすか

FlatListはただ実隓段階であるため、バグが少ないこずや、䞋䜍互換性のない方法で倉曎されるこずを保蚌するものではありたせんが、自己責任で詊すこずができたす。

@sahrens @gre叀いリストビュヌず同じAPIを提䟛するFlatListの䞊に抜象レむダヌを構築しお、叀いアプリケヌションコヌドを同じに保぀こずは可胜ですか。

@sahrens FlatListはUITableViewで実装されおいたすか

FlatListが安定し、実隓的でなくなったら、ListViewず同じAPIを䜿甚しおアダプタヌを䜜成するか、内郚でListViewの実装を亀換する可胜性がありたす。

UITableViewは䜿甚したせん。 実際には、新しいネむティブコヌドはたったく䜿甚されおいたせん。すべお、既存のネむティブ/フレヌムワヌクプリミティブを䜿甚したJSのみです。実装は次の堎所で確認できたす https 

@sahrensありがずうございたす。ずおもクヌルで䟿利です。

@savanthongvanhが初期サむズを0に蚭定するず、初期ロヌド時にListView内のすべおのアむテムがレンダリングされる効果がありたす。 アむテムが倚い堎合は泚意しおください。

たた、このrn0.41.2を凊理したす。 誰かが私がコピヌできるFlatLIstの簡単な実装を持っおいお、本圓にすぐに解決策を望んでいたすか
ありがずう、
ロン

FlatListおよびVirtualizedListは、それらを詊しおみたい堎合はマスタヌになっおいたす。

これを扱っおいる人のためにFlatListを今すぐ始める簡単な方法は次のずおりです https //hackernoon.com/react-native-new-flatlist-component-30db558c7a5b#.xnp03gd2u

initialListSizeを適切な倀に蚭定し、removeClippedSubviewsをfalseに蚭定しお問題を解決したす

@hoperceに感謝しremoveClippedSubviewsは私のために働きたす、 initialListSizeは途切れ途切れのスクロヌルを匕き起こしたす

私はRN.42を持っおいたすが、FlatListの実隓的なラむブラリがここに衚瀺されないため、この問題でアップグレヌドできるようになるたでしばらくの間ではありたせんスタックしたす。

最新バヌゞョンのRNを䜿甚しおいない堎合でも、FlatListコヌドをアプリにい぀でもコピヌできたす。

FlatListを䜿甚するず、「戻るず党景が癜くなる」バグを再珟できたす。 ScrollViewずの関連性が䜎いのではないかず思いたす。

䞀時的に癜くなる問題は、FlatListずはたったく異なり、固有のものです。 私たちはそれを軜枛するために取り組んでいたすが、それは非同期りィンドりレンダリングのトリッキヌな結果です。 この問題が参照するバグは、ナヌザヌがスクロヌルするたで最初のレンダリングでコンテンツが衚瀺されないこずです。これはFlatListで修正されるこずを願っおいたす。

ListViewおよびFlatListでもこの問題が発生したした。

ビュヌのコンストラクタヌでデヌタ゜ヌスを[]にリセットしおから、setTimeout内のアむテムのリストにリセットするこずで、リストを正しくレンダリングできるこずを発芋したした。

参考たでに私のリストビュヌは、TabNavigatorのReactNavigationStackNavigatorに埋め蟌たれおいたす。

たた、プログラムで1pxスクロヌルをトリガヌするハックは、ListView / FlatListの䞡方で匕き続き機胜したす。 ただし、適切なラむフサむクルで呌び出す必芁がありたす通垞は画面に戻ったずき。

@gre 

@gre 、そのためのサンプルコヌドはありたすか そしお、ListViewを含むそのコンポヌネントのcomponentWillMountを意味したすか

@ ericvicenti -RNから他のかなりの数のコヌドが必芁なようです。 他の堎所から少しず぀借りおしたうのではないかず心配でした。 抜くかもしれたせん。 たぶん、他の人が䜿甚できるようにレポにそれを投げたす-それは蚱可されおいたすか

@sahrens申し蚳ありたせんが、䌚瀟のアプリにありたすが、空癜の䟋を䜜成しお再珟するこずもできたす。

コメントの少し䞊の@natdm https 

SectionListでこの問題が発生しおいたす-スクロヌルするたで最初のレンダリングで空癜になりたす。 @sahrens修正はありたすか

@smkhalsa明確な再珟はありたすか removeClippedSubviews = {false}を蚭定したすか

@sahrens removeClippedSubviews = {false}を蚭定するず、これが修正されるようです。 これがないず、この特定のビュヌに移動するたびに空癜の画面が衚瀺されたす。

新しいレポで問題を切り分けお、可胜であれば投皿したす。

私にずっおも同じですremoveClippedSubviewsは間違いなくバグのトリガヌです。 私たちのアプリには、react-native-tab-view内にリストがある簡単な再珟がありたした。 しかし、もっず簡単な䟋でそれを再珟できるかどうかはわかりたせん。

ここで私の答えの最埌の2぀の段萜を参照しおくださいhttps://github.com/facebook/react-native/issues/1831#issuecomment-228775913

私はそれがその呚りの䜕かかもしれないず思いたす単なる仮説

1リストは「バりンディングボックスの倖にある」ため、バックグラりンドタブでレンダリングされたす。removeClippedSubviewsは、リストがここにないず想定し、䜕もレンダリングしたせん癜
2タブがフォヌカスに移動し、そのタブがおそらく<StaticContainer>ようなものを䜿甚しおいるため、䜕も「曎新」されないため、ただ癜です。
3ナヌザヌが「スクロヌル」するずすぐに、removeClippedSubviewsロゞックを曎新したす。これにより、リストセルが衚瀺されおいるず刀断され、曎新されたす。

リヌド@greをありがずう

RN 0.41.2にはただ存圚し、androidは問題ありたせん。ios10だけで、removeClippedSubviews = {false}を蚭定するずこの問題を解決できたす。 私のlistViewは小さいので、倧きな問題ではありたせん。 tabNavigatorreact-navigationのstackNavigator内のlistView。

 render() {
    return (
      <View style={{ flex: 1, justifyContent:'center'}}>
        <ListView
          dataSource={this.state.dataSource}
          renderRow={this._renderRow.bind(this)}
          removeClippedSubviews={false}
        />
      </View>
    );
  }

ここで同じ問題。 removeClippedSubviews = {false}以倖に远加するものは、私にずっおも解決したせんでした。

@agentilela修正しおいただきありがずうございたす、同じ問題がここにありたす

removeClippedSubviews={false}蚭定するず修正されたした

反応ネむティブが-マップでこの問題が存圚するMapView私の知る限りでは䜿甚したせんScrollViewしおずは䜕の関係もありたせんListView 。

この問題はRN44でも匕き続き発生しおおり、 initialListSize={200}問題は解決したすが、衚瀺するたでにレンダリングに時間がかかるため、長期的な解決策ずしおは適切ではないず思いたす。 100行を超えるリストビュヌでは明らかです。

ps removeClippedSubViews={false}は私の問題を解決したせん

removeClippedSubViews={false}はListViewで私のために働いた。
たた、 FlatListにも同じ問題がありたす。

ListView / FlatListずreact-navigationでも同じ問題がありたす。
私はそれを修正したしたlazy: true TabNavigatorコンテナオプションずでremoveClippedSubViews={false} ListViewコントロヌルで

RN0.44.0でバグが発生しおいるこずも確認できたす。

react-navigation + TabNavigator +ListViewたたはFlatListを䜿甚するず発生したす。
タブに移動するず、空に芋えたす。 少しスクロヌルするずリストが衚瀺されたす。

それが発生しおいない唯䞀のタブは、TabNavigatorのinitialRouteNameにありたす

前述のように、lazytrueを蚭定したす。 TabNavigatorはこれを解決したす。

ここでも同じ問題があり、removeClippedSubViewsで修正されたした
重耇する問題https://github.com/facebook/react-native/issues/14069で説明されおいるように
問題を再珟するためのリポゞトリを䜜成したしたhttps://github.com/jcharlet/react_native_listview_bug䜕か助けになるこずがあれば。

たた、同じナヌスケヌスで「react-navigation」の代わりに「react-native-router-flux」を䜿甚した堎合、この問題は発生したせん。

TabNavigatorのreact-navigationに関するいく぀かの問題。 removeClippedSubViews = {false}は圹に立ちたせん。

私にずっおも同じ問題です。 問題のタブの子ずしおTabNavigatorずStackNavigator、およびプレヌンなListViewでreact-navigationを䜿甚したす。 RN 0.44 / Expo 17、そしおremoveClippedSubviewsも怠惰も私を助けたせんでした-/

removeClippedSubviewsはIOSバヌゞョンの修正に圹立ちたしたが、Androidの堎合はinitialListSizeを䜿甚する必芁がありたした

ず

"dependencies": {
    "react": "16.0.0-alpha.6",
    "react-native": "0.44.2",
    "react-navigation": "1.0.0-beta.11"
}

そしおlazy: trueでTabNavigatorのTabNavigatorConfigすべおがうたくレンダリング

const AppNavigator = TabNavigator({
  HomeTab: {
    screen: HomeScreen,
    path: '/'
  },
  PeopleTab: {
    screen: PeopleNavigator,
    path: '/people',
  }
}, {
  lazy: true
});
const PeopleList = ({ people }) => {
  return (
    <FlatList
      data={people}
      renderItem={({item}) => <Text>{item.name}</Text>}
    />
  );
};

にアップグレヌドする
{{
"react-native" "0.44.2"、
"react-navigation" "1.0.0-beta.11"
}
私のために働いた、lazy = trueはStackNavigatorには必芁ないようです

{{
"react-native" "0.44.2"、
"react-navigation" "1.0.0-beta.11"
}
lazy = true
removeClippedSubViews = {false}
動䜜したせん

これは本圓に興味深いこずです。この2幎間のバグが最終的にクロヌズされる時期を確認したいず思いたす。

私はreact-native0.44.2、react-navigation 1.0.0-beta.11にアップグレヌドし、問題のTabNavigatorで「lazy = true」を蚭定するず、それが修正されたした。 おそらくlazy = trueを蚭定するだけでうたくいくでしょうが、私はすでに曎新しおいたした。

@jhalborg FlatListremoveClippedSubViews = {false}のリストの問題を修正したした。

私はreact-navigationを䜿甚しおおり、removeClippedSubViewsは次の構造で機胜したす。

モヌダルスタック->珟圚のタブスタック->ナビゲヌションスタックを含む耇数のタブを含める

私の問題はパフォヌマンスの欠劂だったので、状態倀に基づいおremoveClippedSubViews倀を䜜成し、画面が読み蟌たれおいるかどうかに応じおオン/オフを切り替えるこずができるようにしたした。

別のタブでリロヌドするリストがあるので、次のようなものを䜿甚したす。

constructor (props) {
   super(props)

   this.state = { removeClippedSubViews: false }
} 

componentDidMount () {
  this.setState({ removeClippedSubViews: true })
}

resetData () {
  const callback = (newRecords) => {
    this.setState({ removeClippedSubViews: true, records: newRecords })
  }

  this.setState({ removeClippedSubViews: false, records: [] }, () => {
    someDataHelper.reloadData(callback)
  })
}

render () {
  return (
    <ListView removeClippedSubViews={this.state. removeClippedSubViews} />
  )
}

しばらくの間私を悩たせおいたが、結局はかなり単玔な解決策になったので、これが誰かに圹立぀こずを願っおいたす。

次の理由により、この問題を解決できるようになりたした。

  • 今すぐFlatList / SectionListを䜿甚するこずをお勧めしたす。ListViewには、機胜拡匵はありたせん。
  • スレッドで劥圓な回避策が特定されおいるようです。

考え

これは本圓のバグではありたせんか はいの堎合、なぜ問題をクロヌズするのですか

理由に぀いお

  • FlatListでも発生するため、ListViewだけの問題ではありたせん。
  • removeClippedSubViews削陀するこずは、パフォヌマンスコストを䌎うハックのように思われ、私の意芋では合理的な回避策ではありたせん。

これがFlatList / SectionList内のアクティブなバグであるこずを確認したす。

FlatList / SectionListのパフォヌマンスに関連するいく぀かの問題もありたす。これは、䞀郚の人がただListViewから移動できないこずを意味し、すでに非掚奚になっおいるようです。

䞊で投皿したようなものをコンポヌネント自䜓に統合できたすか

ListViewからの移行でどのような問題が発生したしたか

13727

ListViewが優れおいる堎所の詳现は衚瀺されたせん。 ListViewはそれを行わないため、問題が発生した堎合は、りィンドりサむズを倧きくするか、仮想化をオフにするこずができたす。

先に進む前に、あなたが尋ねた質問に圌らが答えるのを埅ちたすが、それは重芁ではありたせん。この問題はただFlatListで発生しおおり、開いたたたにしおおく必芁がありたす。

䞀般的なコミュニティの知識のためだけに。

この問題は、ネストされたListView、぀たりListView行内のListViewを䜿甚しおいるシナリオで発生したした。 私の解決策は、ネストされたListViewにremoveClippedSubviews={false}を適甚するこずで修正されたした。

react-native-cli: 2.0.1
react-native: 0.41.2

iOS9.xを実行しおいるiPad3 / iPadMiniなどの叀いハヌドりェアでListView / FlatList / VirtualizedList / WindowedListView䜕でもを䜿甚しお倧きなリストをスムヌズにスクロヌルするこずは䞍可胜です。

泚フラットリストに぀いお話しおいるのですが、画像はなく、行のテキストコンポヌネントのみです。

誰かが7000レコヌドのデヌタセットず機胜䟋を共有する可胜性がありたす。スクロヌルはスムヌズで途切れるこずはありたせん。すべおの属性構成を詊しおみおください。運が悪いです😢

同意したした-メモリ管理のために、芋えないセルもクリアしおいたす。 倚くのアプリでこのような重芁なコンポヌネントが倚くのナヌスケヌスでパフォヌマンスに欠けおいるのは残念です。 来週かそこらで深く掘り䞋げお、パフォヌマンスが倧幅に向䞊するかどうかを確認したす。

2017幎6月10日には、午埌3:30 +1000、アリ゚ルFaldutoの[email protected]は、曞きたした

iOS9.xを実行しおいるiPad3 / iPadMiniなどの叀いハヌドりェアでListView / FlatList / VirtualizedList / WindowedListView䜕でもを䜿甚しお倧きなリストをスムヌズにスクロヌルするこずは䞍可胜です。
泚フラットリストに぀いお話しおいるのですが、画像はなく、行のテキストコンポヌネントのみです。
誰かが7000レコヌドのデヌタセットず機胜䟋を共有する可胜性がありたす。スクロヌルはスムヌズで途切れるこずはありたせん。すべおの属性構成を詊しおみおください。運が悪いです😢
—
あなたがコメントしたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信するか、GitHubで衚瀺するか、スレッドをミュヌトしおください。

玠晎らしい@lprhodes 、ここでは、最倧200レコヌドのFlatListを䜿甚した簡単な䜿甚䟋を共有したす。この䟋は、iOS9を搭茉したiPad3では途切れ途切れです。

import React, { Component } from 'react';
import {
  FlatList,
  StyleSheet,
  View,
} from 'react-native';
import Expo from 'expo';
import {
  Text,
  ListItem,
  SearchBar,
} from 'react-native-elements';

class Feed extends Component {

  loadFeed() {
    const {data} = this.props;
    const sections = [];
    data.forEach((value, index) => {
      const sectionName = value.name_line_sp;
      const section = sections.find((section) => {
        return section.title === sectionName;
      });
      if (section) {
        section.data.push(value);
      } else {
        sections.push({
          title: sectionName,
          data: [value]
        });
      }
    });
    if (__DEV__) {
      console.log('Sections size', sections.length);
    }
    return sections[0];
  }

  componentDidMount() {
    this.flatListRef.scrollToOffset({
      animated: false,
      offset: 48
    });
  }

  render() {
    const feed = this.loadFeed();
    return (
      <View style={{flex: 1}}>
        <Text h5 style={styles.section_title}>{feed.title} ({feed. data.length})</Text>
        <FlatList
          style={{flex: 1}}
          ref={(list) => { this.flatListRef = list; }}
          debug
          ListHeaderComponent={() => (
            <SearchBar
              lightTheme
              placeholder='Search...' />
          )}
          data={feed.data} // ~217 records
          keyExtractor={(item) => (
            item.code_group
          )}
          renderItem={({ item }) => {
            return (
              <ListItem
                hideChevron
                key={item.code_group}
                title={`${item.name_group_sp}`}
                subtitle={`${item.price_prod}`}
                containerStyle={{ backgroundColor: 'white' }}
              />
            );
          }}
        />
      </View>
    )
  }
}

import catalog from './data/catalog.json'; 

class App extends Component {
  render() {
    const data = catalog;
    return (
      <View style={styles.container}>
        <Text h3 style={styles.title}>Skillcase</Text>
        <Feed data={data} />
      </View>
    );
  }
}

const styles = StyleSheet.create({
  title: {
    margin: 20,
    marginBottom: 10,
    color: 'white'
  },
  section_title: {
    padding: 20,
    color: 'white',
    backgroundColor: '#1976D2',
  },
  container: {
    flex: 1,
    paddingTop: Expo.Constants.statusBarHeight,
    backgroundColor: '#42A5F5',
  },
});

Expo.registerRootComponent(App);

たたはexpouri 

ありがずう 

サンプルコヌドには、ドキュメントで察凊されおいる倚くの悪い習慣がありたす。 たずえば、関数を絶えず再䜜成および再バむンドしおいる堎合、これはCPUに負担がかかり、リストアむテムの䞍芁な再レンダリングが発生したす。 ListItemコンポヌネントがPureComponentであるこずを確認し、枡されたすべおの小道具が浅いたたであるこずを確認する必芁がありたす。これは、䞍芁な再レンダリングを防ぐためです。 アプリの残りの郚分にもお勧めしたす。

それは倧いに圹立぀はずですが、遅いデバむスで完璧なパフォヌマンスを保蚌するこずはできたせん。 Webブラりザのような他のアプリはこれらのデバむスでどれだけうたく機胜したすか

@outaTiMEたた、各レンダリングでloadFeedを呌び出すべきではありたせん

@lprhodesレンダリングメ゜ッドは1぀しか実行したせんが、いく぀かのベストプラクティスを䜿甚しおコヌドを曎新し、

import React, { Component, PureComponent } from 'react';
import {
  FlatList,
  ListView,
  Text,
  StyleSheet,
  View,
} from 'react-native';
import Expo from 'expo';
import {
  ListItem,
  SearchBar,
} from 'react-native-elements';

class FeedRow extends PureComponent {

  render() {
    const item = this.props.data;
    return (
      <Text>{item.name_group_sp}</Text>
    )
  }

}

class Feed extends Component {

  constructor(props) {
    super(props);
    this.storeListRef = this.storeListRef.bind(this);
  }

  loadFeed() {
    const {data} = this.props;
    const sections = [];
    data.forEach((value, index) => {
      const sectionName = value.name_line_sp;
      const section = sections.find((section) => {
        return section.title === sectionName;
      });
      if (section) {
        section.data.push(value);
      } else {
        sections.push({
          title: sectionName,
          data: [value]
        });
      }
    });
    if (__DEV__) {
      console.log('Sections size', sections.length /*, images.length */);
    }
    return sections[0];
  }

  componentDidMount() {
    this.flatListRef.scrollToOffset({
      animated: false,
      offset: 48
    });
  }

  renderItem(item) {
    return (
      <FeedRow data={item.item} />
    );

  }

  keyExtractor(item) {
    return item.code_group;
  }

  listHeaderComponent() {
    return (
      <SearchBar
        lightTheme
        placeholder='Buscar...' />
    );
  }

  storeListRef(list) {
    this.flatListRef = list;
  }

  render() {
    const feed = this.loadFeed();
    return (
      <View style={{flex: 1}}>
        <Text h5 style={styles.section_title}>{feed.title} ({feed. data.length})</Text>
        <FlatList
          style={{flex: 1}}
          ref={this.storeListRef}
          debug
          // pagingEnabled
          ListHeaderComponent={this.listHeaderComponent}
          data={feed.data} // ~217 records
          keyExtractor={this.keyExtractor}
          renderItem={this.renderItem}
        />
      </View>
    )
  }

}

import catalog from './data/catalog.json';

class App extends Component {

  render() {
    const data = catalog;
    return (
      <View style={styles.container}>
        <Text h3 style={styles.title}>Skillcase</Text>
        <Feed data={data} />
      </View>
    );
  }

}

const styles = StyleSheet.create({
  title: {
    margin: 20,
    marginBottom: 10,
    color: 'white'
  },
  section_title: {
    padding: 20,
    color: 'white',
    backgroundColor: '#1976D2',
  },
  container: {
    flex: 1,
    paddingTop: Expo.Constants.statusBarHeight,
    backgroundColor: '#42A5F5',
  },
});

Expo.registerRootComponent(App);

より良いですが、 debugを蚭定するず、凊理速床が倧幅に䜎䞋したす。 たた、パフォヌマンスを評䟡するずきは、開発/デバッグビルドではなく、最適化された本番ビルドを実行しおいるこずを確認する必芁がありたす。 最埌に、レンダリングごずに新しいスタむルオブゞェクトを䜜成しおいるので、onMountでscrollToOffsetを呌び出す代わりにinitialScrollPositionを䜿甚できたす。

@sahrens yup debugフラグがなく、本番ビルドの最適化を䜿甚するず、react- native0.44を䜿甚するexpo17を䜿甚する前に蚀ったように、動䜜の途切れが少なくなりたす。新しいバヌゞョンのreact-native0.45  FlatListが改善されたした。

ずころで、なぜスタむルはすべおのレンダリングで䜜成されるのですか この堎合、 Feedコンポヌネント内の flexスタむルのレンダリングは1回だけ実行されたす。

  1. Appレンダリング
  2. Feedレンダリング
  3. 次に、耇数のFeedRowレンダリング

@lprhodesは私がいるこずを理解し、それぞれのレンダリングにloadFeedに぀いお私に蚀ったこずに非垞によく䌌Feedレンダリングは1回だけ実行され、これは正しいでしょうか

initialScrollPositionず蚀うずきは、 initialScrollIndexこずですか scrollToOffsetようには機胜したせんFeedマりントされるずきにListHeaderComponent 高さ48pxを非衚瀺にする必芁がありたす

このコン゜ヌルの譊告はどうですか renderItemにPureComponentを䜿甚しおいたすか

VirtualizedList: You have a large list that is slow to update - make sure your renderItem function renders components that follow React performance best practices like PureComponent, shouldComponentUpdate, etc. {"dt":85588,"prevDt":1497296394821,"contentLength":10023}

ありがずう 

この譊告はマスタヌで修正された䞀皮のバグですが、最初のマりントの85秒は非垞に遅いので、コヌドを深く掘り䞋げお、䜕がそんなに時間がかかっおいるのかを理解する必芁がありたす。 あなたがreactのパフォヌマンスをグヌグルで怜玢したり、より広いReactコミュニティで助けを求めたりするなら、そこには倚くのリ゜ヌスがありたす。

はい、私はinitialScrollIndexを意味したした。 それが機胜するためにはgetItemLayoutを実装する必芁があり、それはListHeaderComponentを占めるはずです。

玠晎らしい@ sahrens 、 iOS9のような叀いハヌドりェアが怖いです...新しいデバむスでテストしおもパフォヌマンスの問題はありたせん。他の誰かが同じハヌドりェアの問題を経隓しおいるかどうか知りたいず思いたした...しばらくの間私はコミュニティに私がもっず深い䜕かに到達するかどうか芋るように頌むでしょう、thks !!!

こんにちは私のものはフラットリストにstyle={{ backgroundColor: 'white' }}を䞎えるこずで修正されたした

では、 @ hramosず@ sahrens 、 0.44.0䜿甚しおreact-native-tab-vew 、そしお本圓にコアチヌムは、この時点で掚奚しおいるものをクリアしおいたせん。

@sjmuellerは@sahrensがこれがすでにマスタヌで修正されおいるず蚀っおいたせん

@hramosこのスレッド党䜓をもう䞀床確認したした。 私はそれを芋逃したかもしれたせんが、@ sahrensがFlatListが非衚瀺になるこずがマスタヌで修正されおいるず蚀及しおいるずころはどこにも

@yaronleviがreact-native-tab-viewたたはTabNavigatorにlazy={true}を蚭定するこずを掚奚しおいるこずはわかりたすが、それはiPhone 7plusでも急激な遅延を匕き起こしたす。

@knappdevは、 lazyなくおも機胜するず蚀っおいるので、0.44.0からアップグレヌドしお、成功するかどうかを確認したす。

私の回避策は、フラットリストが䜿甚されおいるかどうかに応じお、removeClippedSubviewsをオン/オフにするこずです。

  constructor (props) {
    super(props)

    this.state = { removeClippedSubviews: false }

    this._disableRemoveClippedSubviews = this._disableRemoveClippedSubviews.bind(this)
    this._onViewableItemsChanged = this._onViewableItemsChanged.bind(this)
    this._renderItem = this._renderItem.bind(this)
  }

  _disableRemoveClippedSubviews () {
    this.setState({ removeClippedSubviews: false })
  }

  _onViewableItemsChanged({ viewableItems, changed }) {
    if (!this.state.removeClippedSubviews) this.setState({ removeClippedSubviews: true })
    if (this._disableRemoveClippedSubviewsTimeout) clearTimeout(this._disableRemoveClippedSubviewsTimeout)
    this._disableRemoveClippedSubviewsTimeout = setTimeout(this._disableRemoveClippedSubviews, 3000)
  }

  render () {    
    const { removeClippedSubviews } = this.state

    return (
      <FlatList
        renderItem={this._renderItem}
        removeClippedSubviews={removeClippedSubviews}
        onViewableItemsChanged={this. _onViewableItemsChanged}
      />
    )
  }

FlatListのremoveClippedSubviewsがデフォルトでオフになりたした。

遅いデバむスの問題に぀いおは、RNTesterアプリFlatListExampleを詊したしたか

FlatListExampleはどのように機胜したすか

FlatListのremoveClippedSubviewsがデフォルトでオフになりたした。

ええ-だから私は実際にスクロヌルするずきにそれをオンにしたす。 そうすれば、ランダムなゞッタヌが少なくなりたす。

次に、FlatList自䜓よりもさらに耳に聞こえるメモリを枛らすために、はるかに芋えないセルを空のセルに眮き換えたす。

それで、最埌に、それがそれほどハヌドなパフォヌマンスを犠牲にしおも、 removeClippedSubviews={false}を䜿甚する代わりにそれを修正する方法はただありたせんか

私の修正は、iOSシミュレヌタヌのjsのデバッグをリモヌトで無効にするこずでした

lazy: true蚭定は私にずっおはうたくいったようです。 ただパフォヌマンスをテストしおいたせん。

私はこの問題をremoveClippedSubViews={false}

最高の仕事
すべおのハヌドりェア/シミュレヌタヌで動䜜したす。 removeClippedSubViews={false}はiPhone7で垞に機胜するずは限りたせん。

リストビュヌで匷制的に移動しおください。

componentDidMount() {
   requestAnimationFrame(() => {
      // HACK TO RELOAD DATA
      this.refs._list.scrollTo({x: 1, y: 0, animated: false})
    });
}

参照䟋。

 <ListView
     ref="_list"
     dataSource={this.state.dataSource}
     renderRow={(data, sectionId, rowId) => <Row
        rowId={rowId}
        selectedRow={this.state.selectedRow}
        onPressRow={this._pressRow.bind(this)}
        {...data}/>}
     renderSeparator={(sectionId, rowId) => <View key={rowId} style={styles.separator} />}
     removeClippedSubViews={false}
     initialListSize={SortedBrandList.count}/>

問題は、すでにマりントされおいる可胜性があるこずです

2017幎8月24日には、午前3時44分pmに、ピヌタヌSuwaraの[email protected]は曞きたした

回避策
すべおのハヌドりェア/シミュレヌタヌで動䜜したす。

'' 'componentDidMount{
requestAnimationFrame=> {
//デヌタをリロヌドするためのハック
this.refs._list.scrollTo{x1、y0、animatedfalse}
};
} '' '

'' '
ref = "_ list"
dataSource = {this.state.dataSource}
renderRow = {data、sectionId、rowId=>}
renderSeparator = {sectionId、rowId=>}
removeClippedSubViews = {false}
initialListSize = {SortedBrandList.count}
/> '' '

—
あなたが蚀及されたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信するか、GitHubで衚瀺するか、スレッドをミュヌトしおください。

私はこの問題を、少なくずもシミュレヌタヌで、次の方法で解決したした。

<ListView removeClippedSubViews={false} .... />

ここでの私の掚枬では、ListViewが珟圚画面に衚瀺されおいない堎合、clippedSubviewsを管理するルヌチンは境界を適切にチェックしおいたせん。 これは、画面倖にレンダリングしおから画面䞊に移動するListViewコンポヌネントでよく発生したす。 これは、修正するのにそれほど難しいバグではないはずです。

この関数が問題であるず確信しおいたす https 

私の掚枬では、それが枬定しおいる座暙空間はどこかで間違っおいたす。 今それを芋おください。

これは修正かもしれたせんか https://github.com/facebook/react-native/pull/15669/files

ただこれに察する修正はありたせんか

@petersuwara あなたが提案した䜜品。 ありがずうございたした。 @MattFoley 修正はい぀ダりンロヌドできるようになりたすか

FlatListだけでなく、ListViewにロヌドする際にも問題があるようです。
デヌタ゜ヌスの蚭定にわずかな遅延を䜿甚するこずで回避策を芋぀けたした。

componentWillMountメ゜ッドでリモヌト゜ヌスからデヌタをロヌドするず、次のコヌドが実行されたす。
動䜜するようです

setTimeout(function(){
       this.updateDataSource(array,newArray)
},30)

updateDataSource = (comments,dataSource) =>{
        this.setState({
            allComments:comments,
            dataSource: this.state.dataSource.cloneWithRows(dataSource),
            isLoading:false

        })
}

そしお、わずかな遅延の間、い぀でもロヌド画面を衚瀺できたす。 ずおも短いので芋えたせん。

@nathvarunのメ゜ッドが

これは、react-navigationのタブに割り圓おられおいるが、珟圚遞択されおいる画面など、すでにマりントされおいるコンポヌネントで発生したす。そのため、componentWillMountを修正しおこれを修正する方法がわかりたせん。

䞊蚘の私のPRは問題を解決したようですが、それをマヌゞするこずができたせんでした。他の誰かがそのPRにチャむムを入れたいですか

@MattFoleyマヌゞするかどうか。 私は今あなたのコヌドを䜿甚しおいたす。 そしおそれは本圓に私の問題を修正したす。

react-navigationのTabNavigatorをreact-navigation lazy: trueもできたす...しかし、これがreact-nativeによっお修正されるのを芋るのは玠晎らしいこずです。

SectionListたたはFlatlistを䜿甚しおいる堎合は、ref = {ref=> this.sectionList = ref}を䜿甚しおください。
そしおあなたのコヌドではthis.sectionList.recordInteraction-あなたのビュヌをレンダリングする必芁がありたす

@MattFoleyの提案された修正はマヌゞされ、0.50リリヌスの䞀郚になりたした https 

曎新したばかりですが、 <ListView />この問題が匕き続き発生しおいたす。 私は䜕か間違ったこずをしおいたすか これが私のpackage.jsonです

  "dependencies": {
    "native-base": "^2.3.1",
    "react": "^16.0.0",
    "react-native": "^0.50.0-rc.1",
    "react-native-linear-gradient": "^2.3.0",
    "react-native-modal": "^4.1.0",
    "react-native-simple-store": "^1.3.0",
    "react-navigation": "^1.0.0-beta.11"
  },

ListViewは今では非掚奚になっおいるず思いたす。 FlatListを詊しおみお、どうなるか芋おみたしょう。

0.50.3でもただこれが芋られおいるず思いたす。 他の誰かが確認できたすか

FlatListに切り替えるこずで、この問題を修正したした。
8:39コリン・ラムれむで金、2017幎11月17日には[email protected]
曞きたした

0.50.3でもただこれが芋られおいるず思いたす。 他の誰かが確認できたすか

—
あなたがコメントしたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/facebook/react-native/issues/1831#issuecomment-345294840 、
たたはスレッドをミュヌトしたす
https://github.com/notifications/unsubscribe-auth/AAZnGZ9oz7uKXx-wz3KFg-FSIzejAfM6ks5s3bavgaJpZM4FP1nt
。

ああ、私たちはすでにFlatListを_䜿甚しおいたす_。

これは0.50.3でもただ問題です。 removeClippedSubviewsは効果がないようです。 これを再開できたすか

0.50.3でもただ問題がありたす。 これをもう䞀床開いおください。

再床ご迷惑をおかけしお申し蚳ありたせんが、再開しおもよろしいですか これは差し迫った問題です。

最新のExpoReact NativeSDKを䜿甚しおこれに遭遇したした。 これは、TabNavigatorの3番目のListViewでのみ発生したす。 2番目ず3番目を入れ替えるず、新しい3番目のペヌゞが圱響を受けたす。 私の堎合、removeClippedSubviewsはそれを修正したした。

requestAnimationFrame(() => { this.listview.scrollTo({y: 1}); });は私のために働いた。

this.listView.scrollToEnd()しおも機胜しなかったため、リストの最埌の座暙を手動で蚈算しお、 scrollTo()枡す必芁がありたした。

フラットリストの堎合、これは同じ配列を曎新するこずによっお発生する可胜性がありたす。 FlatListは、デヌタが異なるかどうかをチェックしたす。 したがっお、䞍倉の配列を利甚しおください

removeClippedSubviews = {false}は、私の堎合のバグを修正したす。

<ListView
            data={this.state.mockData}
            renderRow={(rowData) => this.renderRow(rowData)}
            removeClippedSubviews={false}
 />

@edmengelは正しいです。 私はプロゞェクトに取り組んでいお、たったく同じバグがありたした。

スクロヌルする前に
screen shot 2018-03-10 at 05 44 59

スクロヌル埌
screen shot 2018-03-10 at 05 48 29

React-native-router-flux@^4.0.0-beta.27はナビゲヌションに䜿甚され、App.jsはこれを返したす。 私の怜玢ペヌゞにはリストビュヌが含たれおいお、このバグがありたした。 3番目のタブにありたす。

<Provider store={store}>
        <View style={{flex: 1}}>
            <Router hideNavBar={true}>
                <Scene key="modal" modal>
                    {/* Tab Container */}
                    <Scene key="tabbar" tabs={true} tabBarPosition="bottom" tabBarStyle={{borderTopColor:'black', borderTopWidth:1,backgroundColor:'white'}}>
                      {/*Tabs */}
                        <Scene key="NewPage" component={NewPage} title="NewPage" icon={TabIcon}  hideNavBar={true} />
                        <Scene key="NewPage2" component={NewPage2} title="Newpage2" icon={TabIcon}  hideNavBar={true} />
                        <Scene key="SearchPage" component={SearchPage} title="Search"  hideNavBar={true} />
                    </Scene>
                </Scene>
            </Router>
        </View>
</Provider>

怜玢ペヌゞリストビュヌを含むを3番目のタブから2番目のタブに倉曎するず、リストビュヌは正垞に機胜したした。

このための実甚的なハックを芋぀けたした。

render() {
       setTimeout(() => {
            this.sectionList && this.sectionList.recordInteraction(); 
        }, 50);
        return (
            <SectionList ref={(view) => { this.sectionList = view }} />
        )
}

<Flatlist style={{ flex: 1 }}/>
このトリックは私のために働きたす。

ScrollViewずListView䞡方で、 0.55.4で同じ問題が発生したす。 removeClippedSubviews={false}远加するず機胜したす。

残念ながら、私たちの堎合、Androidで画像の欠萜を回避する必芁があるため、これはオプションではありたせんhttps://github.com/facebook/react-native/issues/13600#issuecomment -315629140

レンダリングで前埌にスクロヌルするのはナビゲヌションの埌であるため、最初は空癜の画面に移行しおいるように芋えたす。

ビュヌを倉曎しおも効果はありたせんでした。

他に䜕か提案はありたすか

私はそれが特定のスクロヌル䜍眮の埌にのみ起こるこずを発芋したした...
https://streamable.com/l5arv

chrome-devtoolsを䜿甚しおビュヌを怜査するず、すべおのサブビュヌがクリップされおいるこずがわかりたす。

ただスタックしおいたす。 @ hramosを再床開いおください。

このような単玔な関数でただ問題がありたすか これが、ReactNativeからストレヌトネむティブコヌドに戻った理由です。

簡単な堎合は、手を貞しお修正しおください@petersuwara

この問題はしばらくの間クロヌズされおいたす。 これがあなたに圱響を及がしおいる堎合は、_新しい問題を開いお_、可胜な限り詳现を提䟛しおください。 ここで報告された元の問題が修正されたため、この問題をロックしおいたす。埌でコメントした各人がたったく同じ問題に盎面しおいるこずは明らかではありたせん。

FacebookではFlatList _広範囲に_䜿甚しおおり、この皮の苊情は瀟内で衚面化しおいない。 このタむプの問題は、たずえば特定のナビゲヌションラむブラリで発生する可胜性がありたす。 問題に関する詳现情報ず、再珟する手順の明確なリスト、たたは理想的には小さなプロゞェクトで新しい問題を開くこずは、非垞に圹立ちたす。

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