rnturkce
  • Introduction
  • Yararlandığım Kaynaklar
  • Babel, ES2015, ES6, ES7 Nedir ?
  • ES6 ve ES7 Örnekler
  • Fonksyionel Programlama
  • Composition
  • Composition ile React Native Örneği(Yazılacak)
  • React JS Nedir ?
  • JSX Nedir ?
  • Lifecycle Methodlar
  • Props Mantığı
  • State Mantığı
  • React Native Nedir ?
  • Installation
  • expo
  • Windows Installation
  • macOS Installation
  • Gnu/Linux Installation
  • React Native Başlangıç
  • Style ve FlexBox
  • Temel Component'ler
  • View
  • Text
  • Image
  • ScrollView
  • ListView
  • FlatList
  • Component API'lar
  • Animasyon
    • LayoutAnimation
    • Animated
      • Animated.Event( )
  • PanResponder
  • react-navigation
    • İç İçe Navigator Kullanımı
    • Header Seçenekleri( Yazılacak )
  • State Yönetimi
  • mobx
  • Redux(Yazılacak)
  • Yılan Oyunu Tutorial
  • Yılan Oyunu Part 1
  • Yılan Oyunu Part 2
  • Yılan Oyunu Part 3
  • Android Apk Oluşturma
Powered by GitBook
On this page

Was this helpful?

ListView

ListView vertical olarak sırf performans gözeterek hazırlanmış bir component. Sadece ekranda görünen componentler render, edilir, diğer componentler cihazın performansını zorlamaz. Bir update işlemi geldiyse tüm liste tekrardan render edilmez, sadece ekranda görünenler render edilir. Bu da ciddi bir akıcılık kazandırır. Ama kabul edelim, biraz syntax ı karışık gelebilir. Tek tek nasıl yazarız ona bakalım.

ListView, ScrollView gibi kendi altındaki elementleri yani children elementleri render etmez. Onun yerine renderRow propsununu kullanır. renderRow aslında dataSource ' dan dönen elementleri derleyen bir çıktı üreten bir fonksiyon. Örneğin, dataSource bir array dönüyorsa, rowData'yı aşağıdaki gibi kullanırız.

(rowData) => <Text>{rowData}</Text>

DataSource

 const ds = new ListView.DataSource({
      rowHasChanged: (r1, r2) => r1 !== r2
 });

ListView elementleri render ederken DataSource API'sini kullanır. DataSource input olarak bir array alır. Bu array her türlü veriyi içerebilir. rowHasChanged bizim verdiğimiz koşula göre verileri karşılaştırır ve hangilerinin render edileceğine karar verir. Yukarıdaki örnekte (r1, r2) => r1 !== r2 olarak verilmiş ama biz (r1, r2) => r1.id !== r2.id olarakta tanımlayabilirdik.

Son olarak datayı DataSource.cloneWithRows(inputArray) olarak çağırmalısınız.

Şimdi her şeyi baştan olarak yazalım.

1-Bizim bir elimizde array olsun.

import React, { Component } from "react";
import { View, Text, ListView, StyleSheet } from "react-native";

const rows = [
  { id: 1, text: "row1" },
  { id: 2, text: "row2" },
  { id: 3, text: "row3" },
  { id: 4, text: "row4" },
  { id: 5, text: "row5" },
  { id: 6, text: "row6" }
];

2-Şimdi constructor ' da DataSource' u yaratalım

  constructor() {
    super();
    const ds = new ListView.DataSource({
      rowHasChanged: (r1, r2) => r1 !== r2
    });  
   }

3-Data yı DataSource.cloneWithRows(inputArray) olarak çağıralım

 constructor() {
    super();
    const ds = new ListView.DataSource({
      rowHasChanged: (r1, r2) => r1 !== r2
    });
    this.state = {
      list: ds.cloneWithRows(rows)
    };
  }

4- ListView kullanıma hazır

<ListView
       dataSource={this.state.list}
       renderRow={rowData =><Text>{rowData.text}</Text>}
 />

Örneğin tamamı için burayı inceleyebilirsiniz

PreviousScrollViewNextFlatList

Last updated 5 years ago

Was this helpful?

https://sketch.expo.io/SJxhqQRoe