2016-07-20 2 views
1

ReactとReduxを使用しています。React.jsを使用して1000個のオブジェクトを含む配列にマッピングしていても、一度に25個のオブジェクトだけをスクリーンにレンダリングする方法

私のコンポーネントの1つでは、1000個のオブジェクトを含む配列にマップしたいが、一度に25個しか画面にレンダリングしない。

また、ユーザーがクリックすると別の25を表示する「もっと読み込み」というボタンがあることが理想的です。

私のRedux状態では、1000個のオブジェクトを含む配列があるので、データベースなどから返された結果を制限したくないので気にしません。レンダリングの方法をコントロールしたいだけです。

renderProducts() { 

     return this.props.allProducts.map(product => { 
     return (
      <div key={product._id} className="col-lg-3 col-md-3 col-sm-3 col-xs-6" id="productThumbnail"> 
      <SingleProduct 
       key={product._id} 
       product={product} /> 
      </div> 
     ); 
     }); 
} 

this.props.allProductsが1000個のオブジェクトを含む配列です:

は、ここで私は私のコンポーネントのメインrenderメソッドの内部で呼び出して、私のrenderProducts()メソッドです。私は一度に25をレンダリングするだけで、毎回画面上の数字を25ずつ増やすボタン用の関数を実装することはできますか?

+0

マップの前にスライスコールを追加し、ページングパラメータを渡します。 –

+0

このように? this.props.allProducts.slice(0,26).map({});そして、もし私がページネーションparamを追加したければ、paramsの値は文字列にする必要がありますか?それをどうするかわからない。 – Mjuice

答えて

0

この点についてはどうですか?この関数は一般的なものです。あなたはredux状態の現在のページとpageSizeにある商品の配列を渡します。これはページあたりのアイテム数です。 UIを追加し、ストアを拡張して、ページやページサイズを状態に保つ必要があります。最終的には、this.props.allProductsのようなコンポーネントのthis.propsから利用できるようになります。

renderProducts(allProducts = [], page, pageSize) { 
    const startIndex = page * pageSize; 
    const endIndex = Math.min(page * pageSize + pageSize, allProducts.length); 

    const viewProducts = allProducts.slice(startIndex, endIndex); 

     return viewProducts.map(product => 
     <div 
      key={product._id} 
      className="col-lg-3 col-md-3 col-sm-3 col-xs-6" 
      id="productThumbnail" 
     > 
      <SingleProduct 
      key={product._id} 
      product={product} 
      /> 
     </div> 
    ); 
} 
+0

pageとpageSizeの値は何ですか?彼らはどのように価値観を得ていますか? – Mjuice

+0

私の返信を更新しました。これを実装する方法を説明するコメントを追加しました。実装はそれをStackOverflowで完全に書くのはそれほど簡単ではありませんが、あなたは主なアイデアを得てそれを自分で実装することができます。ただreduxストアをページとpageSizeをサポートするように拡張し、それらの変数の変更を可能にするUIを追加するだけです。 – anvk

関連する問題