Я думаю, что у этого вопроса есть шанс быть очень полезным / образовательным, и я поделюсь многим из того, что я уже сделал с этим.Чтобы пояснить этот вопрос, вот пример того, как выглядит типичный контейнерный компонент для приложения, которое я создаю (с точки зрения избыточности / потока данных):
// Import React Components
import React, { Component } from 'react';
import { connect } from 'react-redux';
import { fetchDataA } from '../actions/data-a-action.js';
import { fetchDataB } from '../actions/data-b-action.js';
import { fetchDataC } from '../actions/data-c-action.js';
class WhiteBoard extends Component {
constructor(props) {
super(props);
}
componentDidMount() {
this.props.dispatch(fetchDataA());
this.props.dispatch(fetchDataB());
this.props.dispatch(fetchDataC());
}
render() {
if(this.props.error1) { return <div> error message </div> }
if(this.props.error2) { return <div> error message </div> }
if(this.props.error3) { return <div> error message </div> }
if(this.props.loading) { return <div> Loading Screen </div> }
return (
<div>
<p> A website with only a p tag </p>
</div>
);
}
}
function mapStateToProps(reduxState) {
console.log('reduxState: ', reduxState);
return {
dataA: reduxState.DataAReducer.sportsData,
dataB: reduxState.DataBReducer.sportsData,
dataC: reduxState.DataCReducer.sportsData,
loading: (reduxState.DataAReducer.loading ||
reduxState.DataBReducer.loading ||
reduxState.DataCReducer.loading),
error1: reduxState.DataAReducer.error,
error2: reduxState.DataBReducer.error,
error3: reduxState.DataCReducer.error
};
}
export default connect(mapStateToProps)(WhiteBoard);
Все мои редукторыто же самое - полезные данные имеют sportsData
, loading
и error
, которые возвращаются.Пока данные загружаются, loading == true
.Если выборка данных прошла успешно, у sportsData есть нужные мне данные, в противном случае возвращается ошибка.
Для моих приложений, в которых используется сбор данных из 5+ коллекций в моей базе данных, функция mapStateToProps превращается в беспорядок-СУХОЙ кодСоздание реквизитов error1, error2, error3 и т. Д. Также просто кажется плохой практикой.
Есть ли лучший метод для такого типа обработки ошибок / загрузки при извлечении данных с помощью действий / редукторов с избыточностью?Или, как я делаю, это уже лучшая практика?
Редактировать: Дайте мне знать, если обмен информацией о коде действий / редукторе будет полезен.я не хотел перебрасывать это сообщение слишком большим количеством информации, но, может быть, это поможет?