Rayden Storm نشر 23 مارس 2021 أرسل تقرير نشر 23 مارس 2021 هل هذه هي الطريقة الصحيحة لحذف عنصر باستخدام redux؟ DELETE_PLATE: (state, action) => ({ ...state, plates: [...state.plates.splice(0, action.payload), ...state.plates.splice(1)], }) اقتباس
0 Mohammed Saber6 نشر 23 مارس 2021 أرسل تقرير نشر 23 مارس 2021 بالنسبة لي فهي طريقة غير واضحة وغير مفهومة البديل يمكنك استخدام filter فهي أبسط DELETE_PLATE: (state, action) => ({ ...state, plates: state.plates.filter((plate, index) => index !== action.payload) // نقوم فقط بإرجاع العناصر التي لها id // لا يسا،ي ال action.payload }) اقتباس
0 أحمد حبنكة نشر 23 مارس 2021 أرسل تقرير نشر 23 مارس 2021 المعذرة ولكن هل أنت تستخدم redux-toolkit؟ ﻷن الـsyntax يبدو مشابهاً لها إذ لا أرى أي تعليمة switch، إن كنت تستعملها فاحذف العنصر من المصفوفة كما تفعل في الجافاسكريبت العادية هكذا: DELETE_PLATE: (state, action) => { const actionIndex = state.plates.findIndex(plate => plate === action.payload); state.plates.splice(actionIndex); } لاحظ جمال redux-toolkit ، إنها تسمح لك أن تعدل على state مباشرةً دون المساس بمبادئ redux وذلك ﻷن redux-toolkit تستعمل مكتبة immerjs التي تسهل عليك نسخ object وبالتالي تحقيق القاعدة التي تنص على أن state يجب أن يكون immutable. لكن إن كنت لا تستعمل redux-toolkit فالطريقة لحذف عنصر من مصفوفة هي بنسخ المصفوفة أولاً، حذف العنصر ثم إرجاعها هكذا: DELETE_PLATE: (state, action) => { const actionIndex = state.plates.findIndex(plate => plate === action.payload); const newPlates = [...state.plates]; // this way we copy state.plates, newPlates !== state.plates will be true newPlates.splice(actionIndex); // since newPlates is a copy we can modify it return {...state,plates: newPlates}; } مع أنني لا أدري من أين أتيت بهذا syntax الغريب إن لم تكن تستعمل redux-toolkit ، هل الكود السابق pseudo-code ؟ على كل حال أنا أنصح باستخدام redux-toolkit في جميع مشاريع الـredux وهذا ما ينصح به مطورو redux أنفسهم. اقتباس
السؤال
Rayden Storm
هل هذه هي الطريقة الصحيحة لحذف عنصر باستخدام redux؟
DELETE_PLATE: (state, action) => ({ ...state, plates: [...state.plates.splice(0, action.payload), ...state.plates.splice(1)], })
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.