اذهب إلى المحتوى
  • 0

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

أحمد عبد الله2

السؤال

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;

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

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

Recommended Posts

  • 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 نحذفه من المصفوفة

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

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...