Image in ListView that goes off-screen loses its state (never set to 'loaded') <p><strong>The situation:</strong> </p> <p>I have a large list of photos and we are loading them in a grid of thumbnails. These thumbnails are each their own component that are loaded in sets of three within the RenderRow function. Here's the Image component in question:</p> <pre><code>&lt;Image style={styles.image} source={this.state.loaded ? { uri: image.url_small } : imagePlaceholder} onLoad={() =&gt; { this.setState({ loaded: true }); }} onLoadStart={() =&gt; { this.setState({ loaded: false }); }} /&gt; </code></pre> <p><strong>The issue:</strong></p> <p>Our issue is that if you are scrolling rapidly, or have a less-than-optimal internet connection, some of the images that begin loading never have the "onLoad" called, presumably because they are no longer visible (because we scrolled beyond them in the list already). </p> <p>However, when we scroll back to those images, all that is rendered is the placeholder image, and the state of the photo is never set to <code>loaded: true</code>. I've tried messing with the <code>onChangeVisibleRows</code> function on the ListView like so:</p> <pre><code>onChangeVisibleRows={(visibleRows) =&gt; { const visibleRowNumbers = []; for (const row in visibleRows) { visibleRowNumbers.push(row); } this.setState({ visibleRowNumbers }); }} </code></pre> <p>This seems to work as expected and in the RenderRow function I can check if that specific row is visible, and try to re-render and images in that row by passing a <code>isVisible</code> prop to the image component, but the image component still isn't updating when I return true from <code>shouldComponentUpdate</code> when the isVisible prop changes. </p> <p>But to no avail. </p> <p>I believe I'm on the right track, but have hit a dead end. <strong>Does anyone have an idea how I can force an image component to reload?</strong> Or is there some sort of <code>onLoadInterrupted</code> that might be added so that it begins loading again once it is in view?</p>