CodeBlanks Logo Icon CodeBlanks

Birleştirme

Tüm katmanları birleştirerek çalışan bir uygulama yazarsın.

Birleştirme: tüm parçalar

Son derste tüm parçaları birleştiriyoruz. Şu ana kadar: iskelet (App + tasks state), Context (TasksContext + useTasks), API (useEffect + fetch), navigation (Tab.Navigator). Şimdi son bir parça ekliyoruz: loading state.

Loading state, API isteği sürerken kullanıcıya bir yüklenme göstergesi sunar. useState(true) ile başlar; fetch bitince setLoading(false) olur. TasksScreen, loading ise <ActivityIndicator /> gösterir. Bu, uygulamayı daha nazik yapar. Son derste tüm parçalar (Context + hooks + API + navigation + loading) bir araya gelir ve eksiksiz bir uygulama oluşur.

Uygulama Loading state ekle

Mevcut App bileşenine loading state ekle. const [loading, setLoading] = useState(true) ile başlat. useEffect içindeki fetch bittiğinde setLoading(false) çağır. TasksContext.Provider'ın value'suna loading'i ekle.

Başlangıç kodu

App.js
import React, { useState, useEffect, createContext, useContext } from 'react';
import { Text, ActivityIndicator } from 'react-native';
import { NavigationContainer } from '@react-navigation/native';
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';

const TasksContext = createContext();

export function useTasks() {
  return useContext(TasksContext);
}

const Tab = createBottomTabNavigator();

function TasksScreen() {
  const { tasks, loading } = useTasks();
  if (loading) return <ActivityIndicator />;
  return <Text>Görevler: {tasks.length}</Text>;
}

function StatsScreen() {
  const { tasks } = useTasks();
  return <Text>İstatistik</Text>;
}

function App() {
  const [tasks, setTasks] = useState([]);
  // loading state ekle

  useEffect(() => {
    fetch('https://api.example.com/tasks')
      .then((res) => res.json())
      .then((data) => setTasks(data));
  }, []);
  return (
    <TasksContext.Provider value={{ tasks, setTasks }}>
      <NavigationContainer>
        <Tab.Navigator>
          <Tab.Screen name="Görevler" component={TasksScreen} />
          <Tab.Screen name="İstatistik" component={StatsScreen} />
        </Tab.Navigator>
      </NavigationContainer>
    </TasksContext.Provider>
  );
}

Örnek çözüm

App.js
import React, { useState, useEffect, createContext, useContext } from "react";
import { Text, ActivityIndicator } from "react-native";
import { NavigationContainer } from "@react-navigation/native";
import { createBottomTabNavigator } from "@react-navigation/bottom-tabs";

const TasksContext = createContext();

export function useTasks() {
  return useContext(TasksContext);
}

const Tab = createBottomTabNavigator();

function TasksScreen() {
  const { tasks, loading } = useTasks();
  if (loading) return <ActivityIndicator />;
  return <Text>Görevler: {tasks.length}</Text>;
}

function StatsScreen() {
  const { tasks } = useTasks();
  return <Text>İstatistik</Text>;
}

function App() {
  const [tasks, setTasks] = useState([]);
  const [loading, setLoading] = useState(true);

  useEffect(() => {
    fetch("https://api.example.com/tasks")
      .then((res) => res.json())
      .then((data) => {
        setTasks(data);
        setLoading(false);
      });
  }, []);

  return (
    <TasksContext.Provider value={{ tasks, setTasks, loading }}>
      <NavigationContainer>
        <Tab.Navigator>
          <Tab.Screen name="Görevler" component={TasksScreen} />
          <Tab.Screen name="İstatistik" component={StatsScreen} />
        </Tab.Navigator>
      </NavigationContainer>
    </TasksContext.Provider>
  );
}

Soru ve cevaplar

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

1 Context + hooks + API + navigation neyin birleşimi?

App.js
App = Context + hooks + API + navigation
  • Bir kitap
  • Bir ekran
  • Bir test
  • Tam bir uygulama Doğru cevap

Açıklama: Bu dörtlü tam bir uygulama oluşturur.

2 Parçayı rolüne eşle

Kavram Anlamı
Context State paylaşır
hooks Mantığı özetler
API Veri yükler
navigation Ekranları bağlar
loading Bekleme gösterir

3 loading'i value'ya ekle

Soru
value={{ tasks, ____ }}
Cevap
value={{ tasks, loading }}

Açıklama: loading context değerine eklenir.

4 Birleştirme adımında ne eklenir?

App.js
useState(true) + setLoading(false)
  • Loading state Doğru cevap
  • Yeni font
  • Logo
  • Renk paleti

Açıklama: Birleştirme adımında loading state eklenir.

Orta seviye bölümündeki tüm dersler