Это исходный экран простого реагирования, но мне нужен шаблон / шаблон для достижения этой цели:
- Тип действия, различаемое объединение для каждого действия избыточности
- функций для создания каждого действия
Я пробовал несколько шаблонов и не нашел один, который мне нравится, но я новичок в 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 }
}
}
Это вопрос передовой опыт / элегантные шаблоны , а не вопрос моделирования данных. Прошу прощения за любые ошибки копирования / вставки.
Редактировать: Я удалил второй фрагмент псевдокода, потому что он отвлек от вопроса и добавил путаницу