Я знаю, что этот вопрос может показаться дублированным, но я не нашел хорошего решения по этому вопросу, особенно в сочетании с reselect< /а>.
Пожалуйста, рассмотрите следующий компонент контейнера redux:
export default connect((state, props) => {
return {
...props
}
}, (dispatch) => {
if (shouldLoadClinic(store.getState())) {
dispatch(loadClinicInfo())
}
if (shouldLoadTimezones(store.getState())) {
dispatch(loadTimezones())
}
return {}
})(SettingsClinic)
Где например. shouldLoadClinic() определяется следующим образом:
import { createSelector } from 'reselect'
export const isClinicLoaded = ({ clinic }) => {
return clinic.current !== null
}
export const isClinicLoading = ({ clinic }) => {
return clinic.pending
}
export const shouldLoadClinic = createSelector([
isClinicLoaded,
isClinicLoading
], (isLoaded, isLoading) => {
return !isLoaded && !isLoading
})
Этот компонент должен убедиться, что его дочерние компоненты получили все необходимые данные. Несколько причин, почему мне не нравится это решение:
getState() требуется из внешней области (было бы неплохо, чтобы реквизит getState передавался вместе с аргументом «отправка»).
Трудно проверить - чтобы проверить, загружены ли данные при монтировании, мне пришлось бы издеваться над хранилищем, селекторами и действиями.
- Условия - может быть, вызов метода "shouldLoadTimezonesIfNeeded()" для замены условия был бы более чистым способом?
У тебя есть идеи? Может быть, просто ссылок с референсами будет достаточно.
Заранее спасибо.