[解決済み] React JSによる無限スクロール
質問
私はReactで無限スクロールを実装する方法を探しています。私は遭遇した react-infinite-scroll を見つけ、それはDOMにノードを追加するだけで、それらを削除しないので、非効率的であることがわかりました。DOMにノードを追加、削除し、一定の数を維持するReactの実証済みのソリューションはありますか。
以下は jsfiddle の問題です。 この問題では、一度に50個の要素だけをDOMに表示したいのですが、他の要素はユーザーが上下にスクロールするときに読み込まれ、削除される必要があります。 私たちは、その最適化アルゴリズムのためにReactを使用し始めました。今、この問題に対する解決策を見つけることができませんでした。私が出会ったのは airbnb infinite js . しかし、それはJqueryで実装されています。このAirbnb無限スクロールを使用するには、私はしたくないReactの最適化を失う必要があります。
スクロールを追加するサンプルコードです(ここではすべてのアイテムをロードしています。私の目標は一度に50アイテムのみをロードすることです)
/** @jsx React.DOM */
var Hello = React.createClass({
render: function() {
return (<li>Hello {this.props.name}</li>);
}
});
var HelloList = React.createClass({
getInitialState: function() {
var numbers = [];
for(var i=1;i<10000;i++){
numbers.push(i);
}
return {data:numbers};
},
render: function(){
var response = this.state.data.map(function(contact){
return (<Hello name="World"></Hello>);
});
return (<ul>{response}</ul>)
}
});
React.renderComponent(<HelloList/>, document.getElementById('content'));
助けを求めて...
どのように解決するのですか?
基本的には、スクロールするときに、どの要素が表示されているかを判断し、それらの要素のみを表示するように再レンダリングし、画面外の要素を表すために上下に1つのスペーサー要素を置きたいとします。
Vjeux を作成しましたので、ご覧ください。 jsfiddle .
スクロールすると
scrollState: function(scroll) {
var visibleStart = Math.floor(scroll / this.state.recordHeight);
var visibleEnd = Math.min(visibleStart + this.state.recordsPerBody, this.state.total - 1);
var displayStart = Math.max(0, Math.floor(scroll / this.state.recordHeight) - this.state.recordsPerBody * 1.5);
var displayEnd = Math.min(displayStart + 4 * this.state.recordsPerBody, this.state.total - 1);
this.setState({
visibleStart: visibleStart,
visibleEnd: visibleEnd,
displayStart: displayStart,
displayEnd: displayEnd,
scroll: scroll
});
},
の範囲にある行だけを表示するようにレンダー関数を設定します。
displayStart..displayEnd
.
以下もご参照ください。 ReactJS: 双方向の無限スクロールをモデル化する .
関連
-
[解決済み] jQueryでチェックボックスに "checked "を設定する
-
[解決済み] JavaScriptで現在のURLを取得する?
-
[解決済み] JavaScriptで要素のクラスを変更するにはどうすればよいですか?
-
[解決済み] Reactルータを使ったプログラムによるナビゲーション
-
[解決済み] React JSX内のループ
-
[解決済み] Reactのこの3つの点は何をするところなのでしょうか?
-
[解決済み】HTML5入力のプレースホルダの色をCSSで変更する。
-
[解決済み] JavaScriptでの大文字小文字を区別しない正規表現
-
[解決済み] Javascriptで動的に命名されたメソッドを呼び出すにはどうすればよいですか?
-
[解決済み] ReactJS: 双方向の無限スクロールのモデル化
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] JavaScriptで次の要素/前の要素を取得しますか?
-
[解決済み] チェックボックスが選択されているかどうかを確認するjQuery
-
[解決済み] URL/アドレスバーからJavascriptの関数を呼び出す
-
[解決済み] アサインの左側にJavascriptのオブジェクトブラケット表記({ ナビゲーション } =)があります。
-
[解決済み] node.jsで文字列のsha1ハッシュを取得するにはどうすればよいですか?
-
[解決済み] JavaScriptで:hoverのCSSプロパティを変更する
-
[解決済み] react-routerのハッシュフラグメントからクエリパラメータを取得する
-
[解決済み] JavaScriptとLuaの微妙な違い [終了しました]
-
[解決済み] V8 Javascript エンジンのスタンドアロン実行
-
[解決済み] ReactJS: 双方向の無限スクロールのモデル化