2016-04-28 60 views
1

我是ReactJS的新手,並開始在其中開發應用程序。ReactJS和AnguarJS的性能

該應用程序有一個包含100個圖像URL的數組,我在網頁上顯示這些圖像,每個圖像上都有一個刪除按鈕,點擊刪除數組中的圖像URL。

我能夠開發應用程序。

我的問題是每當我刪除一個圖像時,應用程序再次進行網絡調用以獲取其他圖像。例如,如果我刪除了第5張圖片,有網絡電話來獲取6到100的圖片。有沒有什麼辦法可以讓我停止進行這些網絡調用,因爲圖片已經加載。

我在AngularJS中開發了相同的應用程序,它工作得非常好,當我刪除圖像時,沒有網絡調用來獲取其他圖像。

var Image= React.createClass({ 
 
\t removeImage: function(){ 
 
\t \t this.props.removeImage(this.props.index); 
 
\t }, 
 
\t render: function(){ 
 
\t \t var divStyle = { 
 
\t \t \t backgroundImage: 'url(' + this.props.imageUrl + ')' 
 
\t \t }; 
 
\t \t return(
 
\t \t \t <div className="imageWrapper"> 
 
       <div>Image {this.props.index+1}</div> 
 
       <div className="image" style={divStyle}> 
 
        <button className="removeButton" onClick={this.removeImage} >Remove</button> 
 
       </div> 
 
      </div> 
 
\t \t) 
 
\t } 
 
}) 
 
var Images= React.createClass({ 
 
\t getInitialState: function() { 
 
\t \t console.log('Images: getInitialState'); 
 
\t  return {data: imageUrls}; 
 
\t }, 
 
\t removeImage: function(index){ 
 
\t \t console.log('Images: removeImage: index: ',index); 
 
\t \t this.state.data.splice(index,1); 
 
\t \t this.setState({data: this.state.data}); 
 
\t \t console.log('end if removeImage method'); 
 
\t }, 
 
\t render: function(){ 
 
\t \t console.log('in Images: render method: this :', this); 
 
\t \t var imagesNodes = this.state.data.map(function(imageUrl, index){ 
 
\t \t \t return (
 
\t \t \t \t <Image key={index} imageUrl={imageUrl} index={index} removeImage={this.removeImage}/> 
 
\t \t \t) 
 
\t \t },this); 
 
\t \t return(
 
\t \t \t <div className="images"> 
 
\t \t \t \t {imagesNodes} 
 
\t \t \t </div> 
 
\t \t) 
 
\t } 
 
}); 
 

 
ReactDOM.render(
 
\t <Images />, 
 
\t document.getElementById('imagesContainer') 
 
)

回答

3

你的關鍵是根據您的圖像的數組中的索引。

由於刪除映像會更新索引(以及React鍵),因此React將重新渲染所有這些索引(因此React鍵)。

如果你不想重新描繪他們,請嘗試使用別的東西作爲一個鍵(例如圖像URL)

查看更多在這裏:https://facebook.github.io/react/docs/reconciliation.html#keys