вообще без редукторов и без других шаблонов.

довал широко распространенному совету изучения разработки React по первому компоненту мастеринга.props, инкапсулируя состояние пользовательского интерфейса на уровне компонентовthis.state и передать его выборочно через дерево компонентов. Это был поучительный опыт. Я оценил всю мощь шаблона проектирования представлений без сохранения состояния и чувствую, что с помощью этих методов я смог достичь надежных и хорошо организованных результатов.

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

1) Создатели действий как связь бизнеса и логики пользовательского интерфейса

Я считаю, что большая часть логики, которая была ранее реализована в функциях жизненного цикла ReactcomponentDidUpdate и т. д., и вonTouch/onPress обработчики, теперь реализовано всоздатели действий, Это, кажется, положительное развитие, поскольку оно «держит все в одном месте» и позволяет проводить модульное тестирование.

Вопрос: Лучше ли концентрировать бизнес-логику в сети довольно сложных создателей действий?

2) выдолбленныеreducers

Как следствие № 1 выше, я считаю, что мойreducers и их соответствующиеaction объекты превратились в де-факто список сеттеров, которые лишь немного обновляют хранилище состояний передаваемыми значениями следующим образом:

case types.SAVE_ORDER: 
  return Object.assign({}, state, {
    order: action.order,
  });

Большая часть причины этого заключается в том, чтоreducers должны бытьчистые функции и поэтому я ограничен в том, что я могу с ними сделать (например, без асинхронной обработки). Кроме того, редукторам разрешено работать только в соответствующих подсекциях состояния магазина. Учитывая, что большая часть сложности моего приложения уже обязательно находится всоздатели действийМне трудно оправдать произвольную миграцию сложности вreducers просто ради того, чтобы они выглядели полезными.

Вопрос: Нормально ли и приемлемо ли иметь шаблонreducers эта функция просто как прославленные сеттеры в состояние избыточного хранилища?

3)redux-thunk везде

Я спрашивал отдельно на ТАК, почемуredux-thunk даже необходимо (в отличие от вызова создателей стандартных действий внутри асинхронных обратных вызовов / служебных функций). На меня указалиответ Дэном Абрамовым, который дает очень удовлетворительное объяснение (с точки зрения масштабируемости, рендеринга на стороне сервера и многих других причин).

Приняв необходимостьredux-thunkЯ считаю, что большинство моихсоздатели действий необходимо выполнить асинхронные действия, нужен доступ кgetState, или жеdispatch множественные изменения в состоянии. В результате я возвращаюсьthunks'экстенсивно.

Вопрос: Нормально ли для приложения с избыточностью полагаться наthunkСоздатели действий ред, и редко, чтобы запустить стандартное действие объекта непосредственно?

4) Redux как глобальныйthis.state

В конечном итоге, кажется, мое приложениеredux магазин эволюционировал, чтобы эффективно напоминать глобальныйthis.state, Вы можете думать об этом как о сохранении всего состояния приложения вthis.state в самом внешнем компоненте контейнера, но без неизбежного беспорядка, который идет с передачей указанногоstate вниз через вложенные слоиpropsи любые изменения копируют дерево компонентов через крысиное гнездообработчик функции.

Вопрос: Являетсяперевождь c, orrect инструмент для использования в глобальном государственном хранилище? Есть ли альтернативы, которые ведут себя более сродниреагироватьвстроенныйthis.state, позволяя распространять глобальное состояние приложения через компоненты реакции без учета состояния и обновлять его по всему приложению через централизованный «распределительный щит», без кажущейся бесконечной сети шаблонов, констант иswitch заявления, которые приходят с принятиемперевождь?

5) Один единственный тип действия? Этот дополнительный вопрос основан на одном из опубликованных комментариев.

ВопросМожно ли на законных основаниях (со всей серьезностью, а не просто наглядно демонстрировать свою точку зрения) использовать излишки только с одним типом действия?

Пример - создатель действий:

export function someActionCreator(various_params){
  return (dispatch, getState => {
    // ... business logic here ....
    asyncIfThisIfThat().then(val => {
      dispatch({
        // type: 'UPDATE_STATE', // Don't even bother setting a type 
        order: val
      })
    })
  )
}

Один универсальный корпус редуктора:

export default function app(state = initialState, action = {}) {
  return Object.assign({}, state, action)
  // Just unconditionally merge into state!
}

Мне кажется, это обеспечило бы объект состояния глобальной области видимости, который автоматически сопоставляется сconnectкомпоненты, и один, который извлекает выгоду из всех преимуществ неизменного состояния и совместим с Reactprops, В этой схемеdispatch эффективно становится глобальнымsetState.

Примечание - Пожалуйста, не принимайте этот вопрос неправильно - это, конечно, не критикаперевождь, Как ученик, я, очевидно, не в состоянии судить о технологиях, опирающихся на опыт тысяч и поддержку миллионов. Я не сомневаюсь в его ценности в правильном контексте.

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

Ответы на вопрос(3)

Ваш ответ на вопрос