Редуктор / Действие рефактора - PullRequest
0 голосов
/ 22 января 2020

У меня есть следующий редуктор:

...
case PAGE_CHANGED: {
  return {
    ...state,
    property: {
      ...state.property,
      currentPage: action.payload.page
    }
  }
}
...

мой initialState выглядит следующим образом:

export const initialState: RepairsState = {
  property: {...s},
  commercial: {...s}
}

где s равно:

const s = {
  data: [],
  isFetching: false,
  ...paginationInitialState
}

и paginationInitialState равно вот так:

const paginationInitialState: PaginationState = {
  currentPage: 0,
  orderBy: '',
  resultsPerPage: 10,
  searchTerm: '',
  sortableFields: [],
  totalCount: 0
}

реклама и собственность имеют одинаковую структуру состояний, но разное содержание.

Когда я обновляю редуктор PAGE_CHANGED, я использую следующее действие:

export const pageChanged = (page: number): ThunkAction<void, AppState, null, Action<string>> => (
  dispatch: Dispatch,
  getState: () => AppState
) => {
  const searchTerm = getLatestSearchTerm(getState())
  dispatch({
    type: PAGE_CHANGED,
    payload: { page },
  })

  dispatch(searchForRepairs(searchTerm) as any)
}

для коммерческой недвижимости. Я не хочу создавать другое действие для обновления коммерческого редуктора PAGE_CHANGED. Я хочу избежать дублирования логики действий c.

Я думал о передаче дополнительного параметра, когда действие вызывается в пользовательском интерфейсе, примерно так:

pageChanged(2, 'commercial')

, чтобы я мог иметь Если оператор внутри действия, есть ли более чистое решение, чем это?

1 Ответ

0 голосов
/ 23 января 2020

Если вы можете отправить pageChanged(2, 'commercial')

Тогда это может сработать:

export const commercialPageChanged = (page: number) => {
  return pageChanged(page, 'commercial');
}

export const propertyPageChanged = (page: number) => {
  return pageChanged(page, 'property');
}

Таким образом, ваши компоненты не зависят от того, какое значение передать в качестве второго аргумента pageChanged.

...