2017-10-23 4 views
0

Ich lerne Listview von reagieren native, aber ich frage mich, was ist der Zweck von rowhaschangeed wie warum wir es verwenden müssen, wenn es aufgerufen wird. Ich habe viele Dokumente darüber gelesen, auch die gleichen Fragen zu stackoverflow, dann habe ich versucht, rowhaschangeed zu ändern, indem ich eine Listenansicht aktualisiert habe, um sie besser zu verstehen, aber sie wurde nicht aufgerufen. Kann mir jemand genaue Antworten für obige Fragen geben und mir bitte rehashaned nennen. Vielen Dank für Ihre HilfeReactive native Listview rowhaschanged

export default class HelloWorldApp extends Component { 
    constructor (props) 
    { 
    console.log(); 
    super(props); 
    /* 
    this.ds = new ListView.DataSource ({rowHasChanged: (r1,r2) => { 
     console.log ('Row Has Changed was called'); 
     return r1 !== r2} }); 
     */ 
    this.state = { 
     source : new ListView.DataSource ({rowHasChanged: (r1,r2) => { 
     console.log ('Row Has Changed was called'); 
     return r1 !== r2} }) 
    }; 
    } 
    hitMe() 
    { 
    console.log ('hit me'); 
    this.setState ({ 
     source: this.state.source.cloneWithRows([ 
     {name: 'Tu', age: 4}, 
     {name: 'Hau', age : 5}, 
     {name: 'Nguyen', age: 7}, 
     {name: 'Duy', age: 7} 
     ]) 
    }); 
    } 


    render() { 
    return (
     <View style = { {padding: 10} }> 
     <ListView 
     dataSource = { 
      this.state.source 
     } 
     renderRow = { (data) => <Text> {data.name} is {data.age} </Text> } 
     /> 
     <Button onPress = {this.hitMe.bind(this)} title = 'Click me' /> 


     </View> 




    ); 
    } 
} 

Antwort

0

Reagieren india diesen Vergleich verwenden, um festzustellen, ob es das Element der Liste wieder muss machen oder, wenn es sicher ist, erneut mit der gleichen Ansicht zu halte Verschwendung von Ressourcen zu vermeiden. Grundsätzlich ist ein Leistungsmerkmal.

In Ihrem Beispiel glaube ich nicht, dass es erneut aufgerufen wird, da sich die Zeile nicht ändert, so dass Sie das ListView nicht erneut rendern müssen.

können Sie weitere Informationen siehe hier: https://facebook.github.io/react-native/docs/performance.html

By the way, Sie verwenden alte API. ListView ist veraltet und wird irgendwann entfernt. Sie sollten FlatList verwenden.

+1

vielen Dank, es dauerte Zeit für mich, es zu verstehen –

Verwandte Themen