Цель: при загрузке маршрута реактивного маршрутизатора отправьте действие Redux с запросом asynchronic Saga для получения данных для базового компонента без гражданства этого маршрута.Как отправить действие Redux из компонента без гражданства при загрузке маршрута?
Проблема: компоненты без гражданства являются простыми функциями и не имеют методов жизненного цикла, таких как componentDidMount, поэтому я не могу (?) Отправлять Redux-действие изнутри функции.
Вопрос частично связан с Converting stateful React component to stateless functional component: How to implement "componentDidMount" kind of functionality?, но моя цель - просто отправить одно действие Redux, запрашивающее данные, которые будут заноситься в хранилище асинхронно (я использую Saga, но я думаю, что это не имеет отношения к проблеме, поскольку моя цель - просто отправить обычное действие Redux), после чего компонент без гражданства будет повторно отображать из-за измененной информации.
Я думаю о двух подходах: используйте либо функцию react-router, либо метод connect Redux. Существует ли так называемый «Реакт-путь» для достижения моей цели?
EDIT: единственное решение, которое я придумал до сих пор, является диспетчерская действие внутри mapDispatchToProps, таким образом:
const mapStateToProps = (state, ownProps) => ({
data: state.myReducer.data // data rendered by the stateless component
});
const mapDispatchToProps = (dispatch) => {
// catched by a Saga watcher, and further delivered to a Saga worker that asynchronically fetches data to the store
dispatch({ type: myActionTypes.DATA_GET_REQUEST });
return {};
};
export default connect(mapStateToProps, mapDispatchToProps)(MyStatelessComponent);
Однако, это кажется каким-то грязным и не правильный путь.
У меня возникло ощущение, что подход маршрутизатора не является правильным, поскольку он смешивает обработку данных с маршрутизацией, которая кажется антипаттерном. Второй подход интересный, хотя он, кажется, приносит излишнюю сложность (если в любом случае необходим компонент состояния с состоянием, почему бы просто не сделать компонент без состояния без состояния дополнительным контейнером?). – Kitanotori
Я уже упоминал жирным, что это еще более грязный подход :). Он объяснил, что он хотел сохранить его без гражданства, поэтому я дал решение для этого. –