「ロゴウォール」のようなものを構築しようとしていますが、同じ画像があることがよくあります。それらをレンダリングするとき、同じイメージURLが既にフェッチされていても、それらはそれぞれ別々にロードされます。ここでリアクションネイティブ:レンダリングされた画像を再利用
は私のコードです:
export default class LogoWall extends React.Component
{
//...
renderLogo(logoUrl)
{
// need to wrap into a function to have unique keys...
return (key) => <Image
key={key}
source={{uri: logoUrl}}
style={styles.logo}
/>
}
render()
{
// trying to save logos within this object
const logos = {};
return (
<View style={styles.rowContainer}>
{(() => {
let logoRows = [];
for (let i = 0; i < this.props.rows; i++) {
logoRows.push(<View style={styles.logoRow} key={i}>
{this.getLogos(i % 2 === 0).map((logoUrl, key) => {
// should only render when this image doesn't exist
if (typeof logos[logoUrl] === 'undefined') {
logos[logoUrl] = this.renderLogo(logoUrl);
}
return logos[logoUrl](key)
})}
</View>)
}
return logoRows;
})()}
</View>
)
}
}
どのように私は一度だけ1枚の画像をロードするために、これを改善するが、それらは、(再フェッチなし)、複数回表示持つだろうか?
ご回答いただきありがとうございます。はい、私はそれが壁が含まれているので、それが再取得されていることを確認することができます。 20個のロゴが表示され、それぞれが〜1秒の遅れで1つずつレンダリングされます(ネットワークアクティビティもチェックされます)。それらがダウンロードされると、キャッシュされます(ただし、アプリを再起動した後にのみ)。私が実際に望むのは、レンダリングされたイメージのインスタンスにアクセスすることです。上記のように変数に格納すると、再読み込みを試みます(または、アプリケーションの再起動後にキャッシュを使用します)。ですから、レンダリングされたインスタンスを格納する方法が必要なので、再レンダリングしません。 – Dennis
解決するのは大きな問題です。あなたが見つけた解決策を知りたいです。コアでも便利だろうと思う –