目标:当加载反应路由器路由时,派遣一个Redux动作请求异步工作者为该路由的基础无状态组件获取数据。加载路由时如何调度从无状态组件Redux的行动?
问题:无状态部件仅仅是功能,没有生命周期的方法,如componentDidMount,所以我不能从函数内部调度终极版动作(?)。
我的问题部分与Converting stateful React component to stateless functional component: How to implement "componentDidMount" kind of functionality?有关,但我的目标是仅派发一个请求将数据异步填充到商店的Redux动作(我使用佐贺,但我认为这与问题无关,因为我的目标是仅仅派遣一个普通的终极版动作),之后无状态组件将重新呈现由于该变化的数据支撑。
我想到了两种方法:使用react-router或Redux的connect方法的某些功能。有没有一种所谓的“React-way”来实现我的目标?
编辑:唯一的解决办法我已经拿出到目前为止,被派遣内部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
我已经用粗体提到过那是更加肮脏的做法:)。他明确提到他想保持无国籍状态,所以我给出了一个解决方案。 –