Как вложить редукторы Redux в массивы? - PullRequest
0 голосов
/ 20 мая 2018

Я не могу понять, как объединить редукторы во вложенных массивах.Я хочу иметь возможность добавлять несколько подпрограмм в список подпрограмм, и я хочу иметь возможность добавлять несколько дней в каждую подпрограмму.

Я не могу понять, как мне следует комбинировать эти редукторы, чтобы я мог добавить дни в список дней в подпрограмме в список подпрограмм.

Вот пример состояния:

const sampleState = {
  "routines": [
    {
      "name": "Starting Strengh",
      "days": [
        {
          "dayName": "Chest",
          "exercises": [
            {
              "exerciseName": "Bench Press",
              "sets": 5,
              "reps": 5
            }
          ]
        }
      ]
    }
  ]
}

Мои рутинный редуктор и рутинный дневник выглядят так:

function dayReducer(state=[], action) {
  switch (action.type) {
    case ADD_ROUTINE_DAY:
      return [
        ...state,
        {
          name: action.name,
        }
      ]
    default:
      return state
  }
}

function routineReducer(state=[], action) {
  switch (action.type) {
    case ADD_ROUTINE:
      return [
        ...state,
        {
          name: action.name,
          days: dayReducer
        }
      ]
    default:
      return state
  }
}

Я комбинирую свой редуктор так:

const fntnessApp = combineReducers({
  routines: routineReducer,
  routing
})

Пожалуйста, помогите, спасибо!

1 Ответ

0 голосов
/ 20 мая 2018

Редуктор - это не само состояние, а функция, принимающая тип и полезную нагрузку действия и создающая часть состояния.В этом случае я бы, вероятно, сделал бы объекты routineReducer и routineDayReducer в корне, а не списки, а ключи в этом объекте были бы идентификатором для подпрограммы.

dayReducer будет выглядеть примерно так:

function dayReducer(state=[], action) {
  switch (action.type) {
    case ADD_ROUTINE_DAY:
      return {
        ...state,
        [action.routineId] : [
           ...state[action.routineId],
           {
              name: action.name
           }
        ]
      }
    default:
      return state
  }
}

Затем, когда вы mapStateToProps, вы можете выбрать дни, которые вы хотите для рутины, на которую вы смотрите, передавая в идентификатор рутиныселектор.Имеет ли это смысл?Если вы хотите иметь возможность редактировать и в эти дни, вам нужно нормализовать таблицу, как в базе данных, и сохранять все под своим уникальным идентификатором.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...