Birleştirme
- React Native kursu
- Orta seviye
- Ders 116/116
- 6 dk
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
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
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 = 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
value={{ tasks, ____ }}
value={{ tasks, loading }}
Açıklama: loading context değerine eklenir.
4 Birleştirme adımında ne eklenir?
useState(true) + setLoading(false)- Loading state Doğru cevap
- Yeni font
- Logo
- Renk paleti
Açıklama: Birleştirme adımında loading state eklenir.