freeCodeCamp/curriculum/challenges/arabic/03-front-end-libraries/redux/copy-an-object-with-object....

4.3 KiB

id title challengeType isRequired videoUrl localeTitle
5a24c314108439a4d403615b Copy an Object with Object.assign 6 false نسخ كائن مع Object.assign

Description

عملت التحديات الأخيرة عدة مع المصفوفات ، ولكن هناك طرق للمساعدة في فرض ثبات الدولة عندما تكون الدولة object ، أيضا. أداة مفيدة لمعالجة الكائنات هي الأداة المساعدة Object.assign() . Object.assign() كائن هدف وكائنات المصدر وخرائط الخصائص من كائنات المصدر إلى الكائن الهدف. تتم الكتابة فوق أي خصائص متطابقة بواسطة الخصائص في كائنات المصدر. يتم استخدام هذا السلوك بشكل شائع لعمل نسخ ضحلة من الكائنات بتمرير كائن فارغ كوسيطة أولى متبوعة بالكائن (الكائنات) التي تريد نسخها. إليك مثالاً: const newObject = Object.assign({}, obj1, obj2); يؤدي هذا إلى newObject object جديد ، والذي يحتوي على الخصائص الموجودة حاليًا في obj1 و obj2 .

Instructions

تم تعديل حالة Redux والإجراءات للتعامل مع object state . قم بتحرير التعليمة البرمجية لإرجاع كائن state جديد للإجراءات باستخدام الكتابة ONLINE ، والتي تقوم بتعيين خاصية status إلى السلسلة online . حاول استخدام Object.assign() لإكمال التحدي.

Tests

tests:
  - text: يجب أن يوجد مخزن Redux وتهيئة بحالة مساوية للكائن <code>defaultState</code> المعلنة على السطر 1.
    testString: 'assert((function() { const expectedState = { user: "CamperBot", status: "offline", friends: "732,982", community: "freeCodeCamp" }; const initialState = store.getState(); return DeepEqual(expectedState, initialState); })(), "The Redux store should exist and initialize with a state that is equivalent to the <code>defaultState</code> object declared on line 1.");'
  - text: يجب أن يكون كل من <code>wakeUp</code> و <code>immutableReducer</code> دالات.
    testString: 'assert(typeof wakeUp === "function" && typeof immutableReducer === "function", "<code>wakeUp</code> and <code>immutableReducer</code> both should be functions.");'
  - text: يجب أن يؤدي إرسال إجراء من النوع <code>ONLINE</code> تحديث <code>status</code> الخاصية في حالة إلى <code>online</code> ويجب ألا يؤدي إلى تحوُّل الحالة.
    testString: 'assert((function() { const initialState = store.getState(); const isFrozen = DeepFreeze(initialState); store.dispatch({type: "ONLINE"}); const finalState = store.getState(); const expectedState = { user: "CamperBot", status: "online", friends: "732,982", community: "freeCodeCamp" }; return isFrozen && DeepEqual(finalState, expectedState); })(), "Dispatching an action of type <code>ONLINE</code> should update the property <code>status</code> in state to <code>online</code> and should NOT mutate state.");'
  - text: يجب استخدام <code>Object.assign</code> لإرجاع حالة جديدة.
    testString: 'getUserInput => assert(getUserInput("index").includes("Object.assign"), "<code>Object.assign</code> should be used to return new state.");'

Challenge Seed

const defaultState = {
  user: 'CamperBot',
  status: 'offline',
  friends: '732,982',
  community: 'freeCodeCamp'
};

const immutableReducer = (state = defaultState, action) => {
  switch(action.type) {
    case 'ONLINE':
      // don't mutate state here or the tests will fail
      return
    default:
      return state;
  }
};

const wakeUp = () => {
  return {
    type: 'ONLINE'
  }
};

const store = Redux.createStore(immutableReducer);

Solution

// solution required