• 0

react native redux عندما اضيف الى المفضلة فانا اريد ال reducer ان يتحقق ان الايتم لو موجودة لا يضيفها مرة اخرى

import {ADD_TO_FAVORITE, REMOVE_FROM_FAVORITE, CLEAR_FAVORITE} from '../types';

interface InitStateInter {
  myFavorite: [];
}

const initialState: InitStateInter = {
  myFavorite: [],
};

const myFavorite = (state = initialState, action: any) => {
  switch (action.type) {
    case ADD_TO_FAVORITE:
      return {
        ...state,
        myFavorite: [...state.myFavorite, action.payload],
      };
    case REMOVE_FROM_FAVORITE:
      return {
        ...state,
        myFavorite: state.myFavorite.filter(
          favItem => favItem !== action.payload,
        ),
      };
    case CLEAR_FAVORITE:
      return {...initialState};
  }
  return state;
};

export default myFavorite;

عندما اضيف منتج اخر للمفضلة فانه يتحقق ان كان موجود لايضيفة مرة اخرى 

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 1

يعتمد الأمر على بنية المنتج (العنصر الذي تضيفه للبطاقة) فإذا كان يحوي خاصية تدعى العدد quantity فعليك المرور على المصفوفة و البحث عن هذا العنصر و تعديل الخاصية فيه بزيادتها ب 1، وإن لم يكن موجود، تقوم بإضافته للمصفوفة 

case ADD_TO_FAVORITE: {

  let flag = false;

  this.itemsInCart.forEach(el => {
    if (el.itemId == itemDetails.objectId) {
      el.qty += 1;

      flag = true;

      return false;
    }
  })

  if (!flag) {
    this.itemsInCart.push({
      itemId: itemDetails.objectId,
      itemName: itemDetails.dishName,
      itemPrice: itemDetails.price,
      qty: 1
    });
  }


  return {
    ...state,
    myFavorite: [...state.myFavorite, action.payload],
  };
}

يمكن تحقيق ذلك بأكثر من طريقة..

array.indexOf(newItem) === -1 && array.push(newItem);

أو

Array.prototype.pushUnique = function (item){
    if(this.indexOf(item) == -1) {
        this.push(item);
        return true;
    }
    return false;
}

///////////////

var newItem = "NEW_ITEM_TO_ARRAY";
var array = ["OLD_ITEM_1", "OLD_ITEM_2"];

array.indexOf(newItem) === -1 ? array.push(newItem) : console.log("This item already exists");

console.log(array)

 

** إن كان العنصر موجود نزيد تكراره وإلا نضيفه، وبالحذف إن كان موجود نقلل تكراره وإن أصبح 0 نحذفه من المصفوفة

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن