Как справиться с мастерством и деталями - PullRequest
0 голосов
/ 24 апреля 2020

Я использую избыточность для приложения api-centri c и испытываю затруднения с концепцией основного и подробного поиска.

Скажем, я могу получить основной список с действием избыточного толчка, как это:

// action:
export const fetchItems = params => async (dispatch, getState) => {
  dispatch({type: FETCH_ITEMS_REQUEST});
  let response = await api.fetchItems(params);
  dispatch({type: FETCH_ITEMS_SUCCESS, payload: normalize(response, schema)});
}

Затем я хочу детализировать один элемент, который я получаю следующим образом:

export const fetchItem = id = async (dispatch, getState) => {
  dispatch({type: FETCH_SINGLE_ITEM_REQUEST});
  let response = await api.fetchItem(id);
  dispatch({type: FETCH_SINGLE_ITEM_SUCCESS, payload: normalize(response, schema)});
}

Они оба попадают в мой редуктор одинаково -

const reducer = (state, {type, payload}) => {
  switch(type) {
    case FETCH_ITEMS_SUCCESS:
    case FETCH_SINGLE_ITEM_SUCCESS:
      return {
        ...state,
        allIds: payload.result.data,
        byId: payload.entities.item,
        error: null,
        fetching: false
      };
    case FETCH_ITEMS_REQUEST:
    case FETCH_SINGLE_ITEM_REQUEST:
      // how do I/should I separate fetching id=1 vs fetching all items??
      return { ...state, fetching: true, error: null };
    case FETCH_ITEMS_FAILURE:
    case FETCH_SINGLE_ITEM_FAILURE:
      // how do I/should I separate fetching id=1 vs fetching all items for error??
      return { ...state, fetching: false, error: payload };

  }
}

Не думаю, что мне следует делиться извлечением и ошибкой в ​​качестве переменных для одного элемента и всех элементов.

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

Должен ли отдельный элемент быть перемещен в собственный редуктор? В каком случае он не должен следовать шаблону allIds / byId? Я не думаю, что хочу сделать это, потому что я хочу ввести кэширование, чтобы я мог проверить, существует ли запись, прежде чем запрашивать API.

Как структурировать мои редукторные редукторы как для множества, так и для отдельной записи?

...