Что такое «отличный способ» написать этот дискриминационный союз, сводя к минимуму повторение? - PullRequest
0 голосов
/ 17 апреля 2020

Это исходный экран простого реагирования, но мне нужен шаблон / шаблон для достижения этой цели:

  • Тип действия, различаемое объединение для каждого действия избыточности
  • функций для создания каждого действия

Я пробовал несколько шаблонов и не нашел один, который мне нравится, но я новичок в TypeScript (я из Swift и вяза) и поэтому я подумал, что у кого-то будет отличное решение. Вот что я сейчас использую:

enum Name {
  SET_CURRENT_LOCATION = "main.SET_CURRENT_LOCATION",
  SET_IS_MODAL_VISIBLE = "main.SET_IS_MODAL_VISIBLE",
  TOGGLE_MODAL_VISIBLE = "main.TOGGLE_MODAL_VISIBLE",
}

type SetCurrentLocation = { name: Name.SET_CURRENT_LOCATION; value: LocationData | null }
type SetModalVisible = { name: Name.SET_IS_MODAL_VISIBLE; value: boolean }
type ToggleModalVisible = { name: Name.TOGGLE_MODAL_VISIBLE }

export type Action =
  | SetCurrentLocation
  | SetModalVisible
  | ToggleModalVisible

export function setCurrentLocation(value: LocationData | null): Action {
  return {
    name: Name.SET_CURRENT_LOCATION,
    value,
  }
}

export function showModal(): Action {
  return {
    name: Name.SET_IS_MODAL_VISIBLE,
    value: true,
  }
}

export function hideModal(): Action {
  return {
    name: Name.SET_IS_MODAL_VISIBLE,
    value: false,
  }
}

export function toggleModal(): Action {
  return {
    name: Name.TOGGLE_MODAL_VISIBLE,
  }
}

export function reducer(state: State, action: Action): State {
  switch (action.name) {
    case Name.SET_CURRENT_LOCATION:
      return { ...state, currentLocation: action.value }
    case Name.SET_IS_MODAL_VISIBLE:
      return { ...state, isModalVisible: action.value }
    case Name.TOGGLE_MODAL_VISIBLE:
      return { ...state, isModalVisible: !state.isModalVisible }
  }
}

Это вопрос передовой опыт / элегантные шаблоны , а не вопрос моделирования данных. Прошу прощения за любые ошибки копирования / вставки.

Редактировать: Я удалил второй фрагмент псевдокода, потому что он отвлек от вопроса и добавил путаницу

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