CodeBlanks Logo Icon CodeBlanks

Birleştirme

Tüm parçaları birleştirerek çalışan bir yapılacaklar uygulaması yazarsın.

Birleştirme

Son adımda uygulamayı tamamlıyoruz. İki yeni parça eklenecek: bir sayaç ve bir temizle düğmesi. Sayaç, kaç görev olduğunu gösterir; tasks.length ile elde edilir. Temizle düğmesi ise setTasks([]) ile tüm görevleri siler.

Bu küçük eklemeler kullanıcıya genel bir bakış sunar ve hatayla dolan öğeleri temizleme olanağı verir. İki küçük görev seni tam çalışan uygulamaya götürecek. Sonunda ekleme, listeleme, tamamlama ve temizleme özelliklerini bir arada bulunduran gerçek bir yapılacaklar uygulamasına sahip olacaksın.

Uygulama Sayaç ekle

Başlığın altına bir sayaç Text ekle. İçeriği {tasks.length} görev olsun. Yani <Text>{tasks.length} görev</Text> yaz; bunu <Text>Yapılacaklar</Text>'in altına koy.

Başlangıç kodu

App.js
import React from 'react';
import { SafeAreaView, View, Text, TextInput, Button, FlatList, TouchableOpacity, StyleSheet } from 'react-native';

export default function App() {
  const [task, setTask] = React.useState('');
  const [tasks, setTasks] = React.useState([]);
  const addTask = () => {
    setTasks([...tasks, { id: Date.now().toString(), text: task, done: false }]);
    setTask('');
  };
  const toggleTask = (id) => {
    setTasks(tasks.map((t) => (t.id === id ? { ...t, done: !t.done } : t)));
  };
  return (
    <SafeAreaView style={styles.container}>
      <Text>Yapılacaklar</Text>
      {/* sayaç ve temizle düğmesini buraya ekle */}
      <TextInput placeholder="Yeni görev" value={task} onChangeText={setTask} />
      <Button title="Ekle" onPress={addTask} />
      <FlatList
        data={tasks}
        renderItem={({ item }) => (
          <TouchableOpacity onPress={() => toggleTask(item.id)}>
            <Text style={{ textDecorationLine: item.done ? 'line-through' : 'none' }}>{item.text}</Text>
          </TouchableOpacity>
        )}
        keyExtractor={(item) => item.id}
      />
    </SafeAreaView>
  );
}

const styles = StyleSheet.create({
  container: { flex: 1, padding: 16 }
});

Örnek çözüm

App.js
<React.Fragment>
  <Text>Yapılacaklar</Text>
  <Text>{tasks.length} görev</Text>
</React.Fragment>

Uygulama Temizle düğmesini ekle

İki değişiklik yap. (1) toggleTask altına const clearAll = () => setTasks([]) ekle. (2) FlatList'in altına <Button title="Temizle" onPress={clearAll} /> ekle.

Başlangıç kodu

App.js
import React from 'react';
import { SafeAreaView, View, Text, TextInput, Button, FlatList, TouchableOpacity, StyleSheet } from 'react-native';

export default function App() {
  const [task, setTask] = React.useState('');
  const [tasks, setTasks] = React.useState([]);
  const addTask = () => {
    setTasks([...tasks, { id: Date.now().toString(), text: task, done: false }]);
    setTask('');
  };
  const toggleTask = (id) => {
    setTasks(tasks.map((t) => (t.id === id ? { ...t, done: !t.done } : t)));
  };
  // clearAll işlevini buraya ekle
  return (
    <SafeAreaView style={styles.container}>
      <Text>Yapılacaklar</Text>
      <Text>{tasks.length} görev</Text>
      <TextInput placeholder="Yeni görev" value={task} onChangeText={setTask} />
      <Button title="Ekle" onPress={addTask} />
      <FlatList
        data={tasks}
        renderItem={({ item }) => (
          <TouchableOpacity onPress={() => toggleTask(item.id)}>
            <Text style={{ textDecorationLine: item.done ? 'line-through' : 'none' }}>{item.text}</Text>
          </TouchableOpacity>
        )}
        keyExtractor={(item) => item.id}
      />
      {/* temizle düğmesini buraya ekle */}
    </SafeAreaView>
  );
}

const styles = StyleSheet.create({
  container: { flex: 1, padding: 16 }
});

Örnek çözüm

App.js
const clearAll = () => setTasks([]);
// ve return içinde FlatList'in altında:
<Button title="Temizle" onPress={clearAll} />

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Tüm görevleri silmek için ne yaparsın?

App.js
const clearAll = () => ???;
  • setTasks(tasks)
  • setTasks([task])
  • setTasks([]) Doğru cevap
  • tasks = []

Açıklama: setTasks([]) tasks dizisini boşaltır.

2 İşlevi amacına eşle

Kavram Anlamı
addTask Yeni görev ekler
toggleTask Done'ı tersler
clearAll Tümünü siler
tasks.length Görev sayısı

3 Görev sayısını yaz

Soru
<Text>{____} görev</Text>
Cevap
<Text>{tasks.length} görev</Text>

Açıklama: tasks.length dizideki görev sayısını verir.

Başlangıç bölümündeki tüm dersler