Как исправить проблему с состоянием второго слоя в редукторном редукторе? - PullRequest
1 голос
/ 03 июля 2019

Я делаю приложение, которое дает задания методам обучения.Один из редукторов должен изменить состояние метки задачи: передать true или false в зависимости от решения задачи.Но этот код не меняет состояние редуктора.

Мой код:


const initialStateMethods = {
  array: methodsObject
};

const methods = (state = initialStateMethods, action) => {
  switch (action.type) {
    case "CHANGE_MARK":
      return {
        ...state,
        array: state.array.map(method => {
          if (method.id === action.methodIndex) {
            method.tasks.map(task => {
              if (task.id === action.taskIndex) {
                return { ...task, mark: action.mark };
              } else {
                return task;
              }
            });
          }
          return method;
        })
      };

    default:
      return state;
  }
}; 

Но значение метода легко меняется, и он работает.Пример:

const methods = (state = initialStateMethods, action) => {
  switch (action.type) {
    case "CHANGE_MARK":
      return {
        ...state,
        array: state.array.map(method => {
          if (method.id === action.methodIndex) {
            return { ...method, name: "newName" };

          }
          return method;
        })
      };

    default:
      return state;
  }
};

Итак, я предполагаю, что проблема в многослойной структуре

Небольшой фрагмент исходного объекта:

export const methodsObject = [
  {
    name: "from()",
    id: 0,
    tasks: [
      {
        taskName: "Task №1",
        id: 0,
        mark: null
      },
      {
        taskName: "Task №2",
        id: 1,
        mark: null
      }
    ]
  }

1 Ответ

0 голосов
/ 03 июля 2019

Вы пропускаете оператор возврата рядом с вызовом вашего цикла карты:

...
case "CHANGE_MARK":
  return {
    ...state,
    array: state.array.map(method => {
      if (method.id === action.methodIndex) {
        return method.tasks.map(task => {
          if (task.id === action.taskIndex) {
            return { ...task, mark: action.mark };
          } else {
            return task;
          }
        });
      }
      return method;
    })
  };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...