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

السؤال

نشر (معدل)

اريد ان اقوم بتغيير true ل false داخل array تحتوى على objects

 

 

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

interface ItemInter {
  id: number;
}

interface ActionInter {
  type: string;
  payload: {id: number};
}

const initialState = {
  myAllAds: ads,
  myFavorite: [],
};

const myFavorite = (state = initialState, action: ActionInter) => {
  switch (action.type) {
    case ADD_TO_FAVORITE:
      const item = state.myFavorite.find(
        (item: ItemInter) => item.id === action.payload.id,
      );
      if (item) return {...state};

      return {
        ...state,
        myAllAds: [
          ...state.myAllAds,
          // state.myAllAds[action.payload].isFav === false,
        ],
        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;

جربت كتابة هدا الكود
myAllAds: [...(state.myAllAds[action.payload].isFav = false)],

ولكنه اخرج لى هدا الايرور

TypeError: undefined is not an object (evaluating 'state.myAllAds[action.payload].isFav = false')

تم التعديل في بواسطة أحمد ابراهيم عبد الله

Recommended Posts

  • 1
نشر

الطريقة الوحيدة لعمل ما تريده في حالتك هي نسخ المصفوفة قبل التعديل عليها هكذا:

const newmyAllAds = [...state.myAllAds];
newmyAllAds[action.payload].isFav = false;
return {
  ...state,
  myAllAds: newmyAllAds,
  myFavorite: [...state.myFavorite, action.payload],
};

وبهذا يتم التعديل.

ولكن لماذا لا تتعلم redux-toolkit وحينها بدلاً من كل هذا التعقيد يصير تابع add شبيهاً بالتالي:

const item = state.myFavorite.find(
  (item: ItemInter) => item.id === action.payload.id,
);
if (item) return;
state.myFavorite.push(action.payload);
state.myAllAds[action.payload].isFav = false;

 

  • 0
نشر
بتاريخ 5 دقائق مضت قال أحمد حبنكة:

الطريقة الوحيدة لعمل ما تريده في حالتك هي نسخ المصفوفة قبل التعديل عليها هكذا:


const newmyAllAds = [...state.myAllAds];
newmyAllAds[action.payload].isFav = false;
return {
  ...state,
  myAllAds: newmyAllAds,
  myFavorite: [...state.myFavorite, action.payload],
};

وبهذا يتم التعديل.

ولكن لماذا لا تتعلم redux-toolkit وحينها بدلاً من كل هذا التعقيد يصير تابع add شبيهاً بالتالي:


const item = state.myFavorite.find(
  (item: ItemInter) => item.id === action.payload.id,
);
if (item) return;
state.myFavorite.push(action.payload);
state.myAllAds[action.payload].isFav = false;

 

شكرا على الاجابة ولكن لمادا تنصحنى ب redux tool-kit هل يمكنك ان تخبرنى لما هى جيدة

  • 0
نشر
بتاريخ الآن قال أحمد ابراهيم عبد الله:

شكرا على الاجابة ولكن لمادا تنصحنى ب redux tool-kit هل يمكنك ان تخبرنى لما هى جيدة

ﻷن حالتك وحالات مشابهة لها تصير سهلة جداً بـredux-toolkit هذا عدا عن تنظيم كود redux بشكل جميل بالطبع.

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...