Bugün, redux felsefesini gördünüz ve redux ile çalışmayı (store oluşturmayı, action oluşturucu fonksiyonları, bir actionu dispatch etmeyi, reducer yaratmayı ve store içerisindeki verileri sayfada görüntülemeyi) öğrendiniz.
Bu projede, küçük bir film veritabanı içeren bir web uygulamasında çalışacak, iki farklı reducer ile işlem yapacaksınız. Hem mevcut tüm state ve action oluşturucuları kullanacak, hem de sıfırdan reducer/redux pairing'leri oluşturacaksınız.
Görevlerinizi tek tek tamamladığınızdan ve ilerlemeden önce her bir görevi test ettiğinizden emin olun..
- Forklayın.
- Klonlayın
- Ana dizine gidin
-
npm install
-
npm start
DOM ve film reducer fonksiyonu sizin için hazırlandı, ancak onu redux'a bağlamak size bırakıldı.
- Redux store'u yaratmak için
createStore
fonksiyonunu kullanın. - Redux store'u React uygulaması ile ilişkilendirmek için
Provider
bileşenini kullanın.
src/reducers/movieReducers.js
içerisindereducer
fonksiyonu veinitialState
öntanımlı olarak gelmektedir. Filmler datasıinitialState
içerisine eklenmiştir.
-
movieReducer.js
içindekiinitialState
reducer'ın başlangıç değeri olarak atanmalıdır. -
MovieList bileşeni, tüm filmlerimizi ekrana yazdırır. MovieList component'i içerisindeki
movies
datası redux store'dan çekilmelidir.react-redux
içerisindenuseSelector
hookunu kullanarakmovies
değerine erişin. -
AppHeader
component'i, başlık metnini görüntülemek içinappTitle
değişkenini kullanır.
appTitle
değeri redux store'dan çekilmelidir. -
Son olarak
Movie
componentindekimovies
datası yine redux store içerisinden çekilmelidir.
-
movieReducers
dosyası içerisindedeleteMovie
için yazılmış bir kod bloğu olduğunu vemovieActions
dosyası içerisinde ilgili action generator'ın zaten mevcut olduğunu unutmayın. -
Silme Action'ı: Movie componentinde
- Silme işleminin tetiklemesi gereken HTML öğesini bulun ve
event handler
oluşturup ve bu DOM öğesine bağlayın. - Bu handler içerisinde Filmin
id
değeri iledeleteMovie
action'ını tetiklemek içindispatch
edin. - Sonra kullanıcıyı
push('/movies')
komutunu kullanarak filmler sayfasına yönlendirin. - (Bu kısımda,
useParams
ile aldığınızid
değerininstring
olduğunu vemovieReducer
içerisindeki silme eyleminde buna dikkat etmeniz gerektiğini unutmayın!)
- Silme işleminin tetiklemesi gereken HTML öğesini bulun ve
- Film Ekleme Action'ı:
- movieReducer.js'ye bir
ADD_MOVIE
case'i ekleyin. - Bu yeni case'in,
payload
aracılığıyla iletilen film datasınımovies
listesine ekleyin. -
movieActions.js
'deaddMovie
için bir action generator oluşturun. - Bir filmin eklenmesini tetikleyen componenti bulun ve
addMovie
action'ını bağlayın. -
addMovie
'yi çağırmak için gerekli event handlerı oluşturun ve bağlayın. - Yeni bir film eklerken
id
değeri olarakDate.now()
kullanın. - Film eklendikten sonra filmler sayfasına yönlendirmek için
push('/movies/')
komutunu ekleyin.
- movieReducer.js'ye bir
Tebrikler 👏 Artık film reducerı tamamlandığına göre, favori film özelliği için sıfırdan bir reducer oluşturabiliriz. Reducerları birleştirme (
combineReducers
) konusunda çalışacağız.
-
Favoriler özelliği için bir reducer dosyası oluşturun. Bu dosyada kullanacağınız
initialState
objesine aşağıdaki değerlerini ekleyin:favorites { Film[] }
: Film nesnesini içeren bir dizi (başlangıç değeri[]
).displayFavorites { Boolean }
: Uygulamada favorilerin göster/gizle değerini tutan bir boolean (başlangıç değerifalse
).
-
switch
deyiminedefault
case'ini ekleyin. -
Yeni reducerınızı
./reducers/index.js
dosyasına import edin. -
reducers/index.js
'de hemmoviesReducer
'ı hem de favori reducer'ı redux'a bağlamak içincombineReducers
metodunu kullanın. -
Film işlevlerinizin artık çalışmadığına dikkat edin. Neden?
movieReducer
a bağlı componentlerin tekrar çalışmasını sağlamak için gerekli değişiklikleri yapın. -
Store içerisinden
favorites
değeriniFavoriteMovieList
componentine bağlayın ve test edin. -
DisplayFavorites
değerini store içerisinden çekerekMovie
veAppHeader
componentinde ilgili yerlerde kullanın.
Şimdi, uygulamanın geri kalanını kendi başınıza oluşturacaksınız. Bunu yapabilirsiniz!
- Aşağıdaki eylemler için action generator'lar hazır. Siz de reducer case'leri ve event handler kodlarını ekleyin:
-
toggleFavorites
:displayFavorites
state değerinitrue
vefalse
olarak değiştirir.displayFavorites
false
olduğunda, favori filmler componenti uygulamada görünmez. -
addFavorite
: Favoriler listesine yeni bir film nesnesi ekler. -
removeFavorite
: Gönderilen bir id ile bir film Nesnesini favoriler listesinden kaldırır.
-
Favoriler görüntülenmiyorsa, kullanıcının bir öğeyi favorilere eklemesine izin vermemek mantıklıdır. Ekleme, favori düğmesinin SADECE displayFavorite true ise görüntülenmesi anlamına gelir.
-
Şu anda, aynı filmi birden çok kez favorilerinize ekleyebilirsiniz. Yalnızca listede olmayan filmleri favorilere eklenebilir hale getirmek için AddFavorite eylemini güncelleyin.
-
Eğer film ana filmler listesinden silinirse, favorilere ekliyse ordan da silinmelidir, kodunuzu buna göre güncelleyin.
-
İçeriklerinizi stilleyin ❤️
Tebrikler! Projeyi başarıyla tamamladın 👏👏👏