Это мой магазин форма:Где хранить редукторы влияет глобальное состояние
export default {
isRequesting: false,
requestError: null,
things: [],
otherThings: []
}
Когда things
и otherThings
они загружаются с сервера, isRequesting
изменяется и requestError
потенциально могут быть изменены. В настоящее время, я меняю их в редукторах, как reducers/thingReducer.js
и reducers/otherThingReducer.js
, например:
// reducers/thingReducer.js
import { combineReducers } from 'redux'
import { LOAD_THINGS_REQUESTING, LOAD_THINGS_SUCCESS, LOAD_THINGS_ERROR } from '../actions/actionTypes'
import initialState from './initialState'
export function things(state = initialState.things, action) {
switch(action.type) {
case LOAD_THINGS_SUCCESS:
return action.things
default:
return state
}
}
export function isRequesting(state = initialState.isRequesting, action) {
switch(action.type) {
case LOAD_THINGS_REQUESTING:
return true
case LOAD_THINGS_SUCCESS:
return false
case LOAD_THINGS_ERROR:
return false
default:
return state
}
}
export function requestError(state = initialState.requestError, action) {
switch(action.type) {
case LOAD_THINGS_ERROR:
return action.error
default:
return state
}
}
const thingsReducer = {
things,
isRequesting,
requestError
}
export default thingsReducer
Как вы можете видеть, у меня есть восстановителей для isRequesting
и requestError
в моем thingReducer
и у меня то же самое в otherThingReducer
, а также.
Вы также можете видеть, что я экспортировать каждую функцию, так что я могу сделать следующее в rootReducer.js
const rootReducer = combineReducers({
...thingReducer,
...otherThingReducer
})
export default rootReducer
Я никогда не видел это сделано в примере кода (разводя восстановителей), которая заставляет меня думать, каждый файл редуктора должен содержать только одну функцию. Я понимаю, что это два вопроса:
Должен
isRequesting
иrequestError
живут в отдельных файлах редуктора (даже если они являются частью глобального состояния)Если да, то они должны быть распространены и в сочетании, как Я сделал это выше. Даже если ответ на 1) нет, могу ли я использовать этот метод распространения/объединения, когда каждый файл редуктора фактически требует нескольких редукторов?
Спасибо, я положу их в разные файлы, чтобы оставаться СУХОЙ. И тогда, я думаю, больше не нужно распространять - спасибо! –
На самом деле, так как у меня есть 'LOAD_THINGS_SUCCESS' и т. Д., Не имеет ли смысл связывать их с редуктором' thing'? Существует ли обычная практика установки независимого 'LOAD_SUCCESS' для любых вызовов AJAX? Если да, не было бы беспорядочно отправлять «LOAD_SUCCESS» и «LOAD_PARTS_SUCCESS»? –
Вы можете определенно повторно использовать действия из других модулей или иметь общий общий набор редукторов. Другая практика (снова у Ducks) - это префикс имени действия с именем модуля/редуктора. например 'thing/LOAD_THINGS_REQUESTING' и' otherThing/LOAD_THINGS_REQUESTING'. Я предпочитаю не многократно использовать действия и использовать префиксный подход, чтобы помочь мне в отладке и отслеживании потока моего приложения. –