2017-11-21 19 views
8

SectionListをスクロールするアルファベット・スクラバーを作成しました。 SectionListは、getItemLayoutを使用して最適化されます。アルファベットをスクラブすると、スクロールは計画どおりに行われますが、SectionListはスクリーンから指を離すまで再レンダリングされません。この問題を解決する方法についてReact Native:最適化されたSectionListはscrollToLocation後に再レンダリングしません。

See this expo snack

誰でもアイデア? sectionListは、あなたがその状態に使用してデータを配置する必要が動的に更新するために

Screenshot of example

答えて

5

PanResponderのソースコードを使用して解決しました。 PanResponderは、InteractionManagerを介して対話ハンドルを設定します。あなたはそれはあなたがSectionList内の位置までスクロール毎回これがthis.panResponder.getInteractionHandle()(文書化されていない機能)を介してハンドルにアクセスして、明確にすることができます

if (this.panResponder.getInteractionHandle()) { 
    InteractionManager.clearInteractionHandle(
     this.panResponder.getInteractionHandle() 
    ); 
} 

これは、その可視性の計算とレンダリングを実行するには、キューにSectionListを上に移動します。

パフォーマンスの理由からInteractionManagerが使用されているため、できるだけ数回インタラクションハンドルをクリアすることで、これを大幅に最適化することをお勧めします。

+0

いいね!彼らは明らかにこれをさらに記録する必要があります。あなたがそれを解決して聞いてうれしい:) – ShaneG

0

。この(他の誰かによって行われる)万博例、良い例です。

https://snack.expo.io/Syy1bqKxW

彼panResponderは、彼が位置を毎回それを更新するSETSTATE()を呼び出した状態にしておき、「handlePanResponderMove」にすべてのデータを持っています動きます。つまり、データが状態にない場合は、動的に更新されません。データをReact-Nativeの状態にすることは、データ変更を動的に追跡する方法です。

希望すると便利です。

+1

こんにちは@Gersom。私は上記の私の答えにいくつかのフィードバックをいただければ幸いです。より多くのポイントを取得しようとしています。質問がある場合はお知らせください! :) – ShaneG

+0

SectionListは、そのscrollToLocationメソッドが呼び出されるので、再レンダリングする必要があることを知っておく必要があります。それはあなたが画面の指を持ち上げると動作し、状態変化もありません。私はあなたに答える時間をとっていただきありがとうございますが、私はうまくいけばsetStateトリックなしで動作する解決策を探しています:) – Gersom

+0

@Gersom問題はありません。しかし、国家は、リアクションネイティブの枠組みの一部ではありません。 https://facebook.github.io/react-native/docs/state.html - "変更されるデータについては、状態を使用する必要があります。"あなたのデータはスクロールしながら読み込まれています。あなたがパンすると、あなたのデータは変化しています。私のリンクごとに、これを追跡するために州を使用する必要があります。 – ShaneG

関連する問題