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
createStorefonksiyonunu kullanın. - Redux store'u React uygulaması ile ilişkilendirmek için
Providerbileşenini kullanın.
src/reducers/movieReducers.jsiçerisindereducerfonksiyonu veinitialStateöntanımlı olarak gelmektedir. Filmler datasıinitialStateiçerisine eklenmiştir.
-
movieReducer.jsiçindekiinitialStatereducer'ın başlangıç değeri olarak atanmalıdır. -
MovieList bileşeni, tüm filmlerimizi ekrana yazdırır. MovieList component'i içerisindeki
moviesdatası redux store'dan çekilmelidir.react-reduxiçerisindenuseSelectorhookunu kullanarakmoviesdeğerine erişin. -
AppHeadercomponent'i, başlık metnini görüntülemek içinappTitledeğişkenini kullanır.
appTitledeğeri redux store'dan çekilmelidir. -
Son olarak
Moviecomponentindekimoviesdatası yine redux store içerisinden çekilmelidir.
-
movieReducersdosyası içerisindedeleteMovieiçin yazılmış bir kod bloğu olduğunu vemovieActionsdosyası 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 handleroluşturup ve bu DOM öğesine bağlayın. - Bu handler içerisinde Filmin
iddeğeri iledeleteMovieaction'ını tetiklemek içindispatchedin. - Sonra kullanıcıyı
push('/movies')komutunu kullanarak filmler sayfasına yönlendirin. - (Bu kısımda,
useParamsile aldığınıziddeğerininstringolduğunu vemovieReduceriç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_MOVIEcase'i ekleyin. - Bu yeni case'in,
payloadaracılığıyla iletilen film datasınımovieslistesine ekleyin. -
movieActions.js'deaddMovieiçin bir action generator oluşturun. - Bir filmin eklenmesini tetikleyen componenti bulun ve
addMovieaction'ını bağlayın. -
addMovie'yi çağırmak için gerekli event handlerı oluşturun ve bağlayın. - Yeni bir film eklerken
iddeğ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
initialStateobjesine 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).
-
switchdeyiminedefaultcase'ini ekleyin. -
Yeni reducerınızı
./reducers/index.jsdosyasına import edin. -
reducers/index.js'de hemmoviesReducer'ı hem de favori reducer'ı redux'a bağlamak içincombineReducersmetodunu kullanın. -
Film işlevlerinizin artık çalışmadığına dikkat edin. Neden?
movieReducera bağlı componentlerin tekrar çalışmasını sağlamak için gerekli değişiklikleri yapın. -
Store içerisinden
favoritesdeğeriniFavoriteMovieListcomponentine bağlayın ve test edin. -
DisplayFavoritesdeğerini store içerisinden çekerekMovieveAppHeadercomponentinde 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:displayFavoritesstate değerinitruevefalseolarak değiştirir.displayFavoritesfalseolduğ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 👏👏👏