CodeBlanks Logo Icon CodeBlanks

Şehir seçimi

Şehir seçimi eklersin.

Şehir seçimi yaklaşımı

Kullanıcının şehir seçmesi için birkaç seçenek var: düğmeler, bir liste ya da bir Picker. Bu projede Picker kullanacağız; o, açılır bir menü gibidir ve az yer kaplar.

Picker @react-native-picker/picker paketinden gelir. import {'{ Picker }'} from '@react-native-picker/picker' ile içe aktarılır. Her şehir için bir <Picker.Item> eklersin.

Picker'ın selectedValue prop'u hangi şehrin seçili olduğunu, onValueChange ise seçim değişince çağrılır. Biz setWeather ile yeni şehre göre tüm weather nesnesini güncelleyeceğiz.

Şehir değişince weather'ı güncelle

Picker'ın onValueChange prop'u yeni seçilen değeri alır. Biz bu değere göre yeni bir weather nesnesi kurup setWeather ile kaydederiz.

Örnek: onValueChange={'{(value) => setWeather(getWeather(value))}'}. Burada getWeather bir şehir adı alıp ona ait hava durumu nesnesini döndüren yardımcı fonksiyondur. Böylece kod sade kalır.

Bu derste getWeather'i basit bir if zinciri ya da nesne haritası olarak yazabiliriz. Şimdilik üç şehir yeterli: İstanbul, Ankara, İzmir. Her birinin temp ve condition değerlerini elle vereceğiz.

Uygulama Şehir seçici ekle

App bileşenine bir <Picker> ekle. selectedValue={'{weather.city}'} ve onValueChange prop'ları olsun. onValueChange, yeni şehre göre setWeather çağrısı yapsın. İçine en az iki <Picker.Item> koy (İstanbul ve Ankara). App fonksiyonunu dışa aktar.

Başlangıç kodu

App.js
import { useState } from 'react';
import { View, Text, StyleSheet } from 'react-native';
import { Picker } from '@react-native-picker/picker';

function App() {
  const [weather, setWeather] = useState({ city: 'İstanbul', temp: 18, condition: 'Bulutlu' });
  return (
    <View style={styles.container}>
      <Text style={styles.city}>{weather.city}</Text>
      <Text style={styles.temp}>{weather.temp}°C</Text>
      <Text style={styles.condition}>{weather.condition}</Text>
      {/* Picker'ı buraya ekle */}
    </View>
  );
}
const styles = StyleSheet.create({
  container: { flex: 1, justifyContent: 'center', alignItems: 'center' },
  city: { fontSize: 24, marginBottom: 8 },
  temp: { fontSize: 64, fontWeight: 'bold' },
  condition: { fontSize: 18, color: '#555' }
});
export default App;

Örnek çözüm

App.js
import { useState } from 'react';
import { View, Text, StyleSheet } from 'react-native';
import { Picker } from '@react-native-picker/picker';

const WEATHER_BY_CITY = {
  'İstanbul': { city: 'İstanbul', temp: 18, condition: 'Bulutlu' },
  'Ankara': { city: 'Ankara', temp: 22, condition: 'Güneşli' }
};
const getWeather = (city) => WEATHER_BY_CITY[city] || WEATHER_BY_CITY['İstanbul'];

function App() {
  const [weather, setWeather] = useState(getWeather('İstanbul'));
  return (
    <View style={styles.container}>
      <Text style={styles.city}>{weather.city}</Text>
      <Text style={styles.temp}>{weather.temp}°C</Text>
      <Text style={styles.condition}>{weather.condition}</Text>
      <Picker
        selectedValue={weather.city}
        onValueChange={(value) => setWeather(getWeather(value))}>
        <Picker.Item label='İstanbul' value='İstanbul' />
        <Picker.Item label='Ankara' value='Ankara' />
      </Picker>
    </View>
  );
}
const styles = StyleSheet.create({
  container: { flex: 1, justifyContent: 'center', alignItems: 'center' },
  city: { fontSize: 24, marginBottom: 8 },
  temp: { fontSize: 64, fontWeight: 'bold' },
  condition: { fontSize: 18, color: '#555' }
});
export default App;

Soru ve cevaplar

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

1 Picker içe aktar

Soru
import { ____ } from '@react-native-picker/picker';
Cevap
import { Picker } from '@react-native-picker/picker';

Açıklama: Picker @react-native-picker/picker paketinden gelir.

2 Şehir seçimi parçalarını eşle

Kavram Anlamı
Picker Açılır menü bileşeni
selectedValue Seçili değeri tutar
onValueChange Seçim değişince çağrılır
Picker.Item Tek bir seçenek

3 Picker'da seçim değişince ne çağrılır?

  • onPress Doğru cevap
  • onLayout
  • onChangeText
  • onValueChange

Açıklama: onValueChange Picker'ın seçim olayıdır.

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